As discussed in the hidden Gems session at the recent UNITE conference there is a simple script to retrieve the value of a DialogParameter of a Request (PersonWantsOrg).
I faced now a situation to update a value (based on an External Decision) and want to share that script with you.
Basically it works like the QER_Get_ParameterValue_Of_ParameterSet_Of_PWO Script just expecting a value (if empty, value will be set empty).
Public Function CCC_Set_ParameterValue_Of_ParameterSet_Of_PWO( _ ByVal keyPWO As String, _ ByVal paramName As String, _ Optional ByVal paramValue As String = "" ) As Boolean ' Parameters: ' keyPWO: PersonWantsOrg.XObjectKey ' paramName: ParameterName ' paramValue: If empty, paramvalue is set empty 'returns nothing, if the ParameterName was not found the DialogParameterSet 'for use in processes to set parameter values (where a parameter with value nothing is not generated) If Not String.IsNullOrEmpty(keyPWO) AndAlso Not String.IsNullOrEmpty(paramName) Then 'determine the DialogParameterSet of the request Dim pSet As String = Nothing Dim f As ISqlFormatter = Connection.SqlFormatter If Session.Source().TryGetSingleValue(Of String) _ (Query.From("DialogParameterSet") _ .Where(f.UidComparison("ObjectKeyUsedBy", keyPWO)) _ .Select("UID_DialogParameterSet"), pSet) Then 'get the DialogParameter as IEntity from the DialogParameterSet Dim param As IEntity = Nothing If Session.Source().TryGet _ (Query.From("DialogParameter") _ .Where(f.AndRelation( _ f.UidComparison("UID_DialogParameterSet", pSet), _ f.Comparison("ParameterName", paramName, ValType.String, CompareOperator.Equal, FormatterOptions.IgnoreCase))).SelectAll() _ , EntityLoadType.Default _ , param) Then param.PutValue("ParameterValue",paramValue) param.Save(session) End If Else 'DialogParameterSet was not found Throw New ViException(#LD("No parameter set found for request {0}.", keyPWO)#, ExceptionRelevance.EndUser) End If End If Return Nothing End Function