0
2 개의 사용자 정의 워크 플로우가 있습니다. 하나의 출력은 다른 출력에 대한 입력이됩니다. 내가 처음 사용자 지정 워크 플로를 호출하고 다른 단계에서의 출력을 사용하면Dynamics 365 + 사용자 정의 워크 플로우 + 엔티티 참조에는 ID 및 키 속성이 없습니다.
, 그것은 나에게 오류가 있습니다 : 1 워크 플로
'InValid Argument' error - Entity Reference cannot have Id and Key Attributes empty.
코드 -
public class RetrieveCaseForUnit : WorkFlowActivityBase
{
#region Input Parameters
[Input("Unit")]
[ReferenceTarget(msdyn_customerasset.EntityLogicalName)]
public InArgument<EntityReference> Unit { get; set; }
#endregion
#region Output Parameters
[Output("Case")]
[ReferenceTarget(Incident.EntityLogicalName)]
public OutArgument<EntityReference> Case{ get; set; }
#endregion
public override void ExecuteCRMWorkFlowActivity(CodeActivityContext executionContext, LocalWorkflowContext crmWorkflowContext)
{
try
{
if (crmWorkflowContext == null)
{
throw new ArgumentNullException("crmWorkflowContext is null");
}
crmWorkflowContext.Trace("Getting Unit Input");
EntityReference unitRef = Unit.Get<EntityReference>(executionContext);
if (unitRef == null)
{
crmWorkflowContext.Trace("Error Message : Unit value not provided");
throw new ArgumentNullException("Unit value not provided");
}
EntityReference caseRef = GetCase(crmWorkflowContext, unitRef);
if (caseRef != null)
{
Case.Set(executionContext, caseRef);
}
else
{
Case.Set(executionContext, null);
}
}
catch (Exception ex)
{
throw new InvalidWorkflowException();
}
}
private static EntityReference GetCase(LocalWorkflowContext crmWorkflowContext, EntityReference unitRef)
{
EntityReference caseRef = null;
CrmServiceContext serviceContext = new CrmServiceContext(crmWorkflowContext.OrganizationService);
var caseRecord = (from currentcase in serviceContext.IncidentSet
where currentcase.gsscore_Unitid.Id == unitRef.Id
&& currentcase.gsscore_CaseTypeId.Id == new Guid("3A152B94-D2DF-E711-A94A-000D3A30DB97")
orderby currentcase.CreatedOn descending
select currentcase).FirstOrDefault();
crmWorkflowContext.Trace("Case Record" + caseRecord);
if (caseRecord != null)
caseRef = caseRecord.ToEntityReference();
return caseRef;
}
}
코드 2 워크 플로 -
public class NMSGetWorkOrderForCase : WorkFlowActivityBase
{
#region Input Parameters
[Input(gsscore_nmsmessage.Fields.gsscore_CaseId)]
[ReferenceTarget(Incident.EntityLogicalName)]
public InArgument<EntityReference> Case { get; set; }
#endregion
#region Output Parameters
[Output(gsscore_nmsmessage.Fields.WorkOrder)]
[ReferenceTarget(msdyn_workorder.EntityLogicalName)]
public OutArgument<EntityReference> NMSWorkOrder { get; set; }
#endregion
public override void ExecuteCRMWorkFlowActivity(CodeActivityContext executionContext, LocalWorkflowContext crmWorkflowContext)
{
if (crmWorkflowContext == null)
{
throw new ArgumentNullException("crmWorkflowContext is Null");
}
if (Case.Get(executionContext) == null)
{
crmWorkflowContext.UserId = crmWorkflowContext.WorkflowExecutionContext.UserId;
throw new InvalidWorkflowException();
}
crmWorkflowContext.Trace("Start");
Guid caseId = Case.Get<EntityReference>(executionContext).Id;
try
{
CrmServiceContext serviceContext = new CrmServiceContext(crmWorkflowContext.OrganizationService);
var WorkOrderRecord = (from currentworkoder in serviceContext.msdyn_workorderSet
where currentworkoder.msdyn_ServiceRequest.Id == caseId
orderby currentworkoder.CreatedOn descending
select currentworkoder.Id
).ToList().FirstOrDefault();
if (WorkOrderRecord != null)
{
EntityReference workorderRef = new EntityReference(msdyn_workorder.EntityLogicalName, WorkOrderRecord);
NMSWorkOrder.Set(executionContext, workorderRef);
}
}
catch (Exception ex)
{
crmWorkflowContext.TracingService.Trace("Case record does not exist." + crmWorkflowContext.WorkflowExecutionContext.MessageName + ex.Message);
if (crmWorkflowContext.ErrorCode == null)
{
crmWorkflowContext.ErrorCode = ((int)WorkflowActivityErrorCode.NMSGetWorkOrderForCaseError).ToString();
}
crmWorkflowContext.UserId = crmWorkflowContext.WorkflowExecutionContext.UserId;
throw new InvalidWorkflowException();
}
}
}
으로 변경해야합니다. 첫 번째 워크 플로가 실제로 출력을 제공하고 있습니까? –
2 단계 WF 활동이있는 두 번째 단계를 제거하고 1 단계 WF 활동을 디버그하여 caseRecord & caseRef에 들어오는 것을 확인하는 것과 같이 단계별로 단계별로 설명하지 않는 이유는 무엇입니까? 추적이 너에게 이미 어떤 생각을 주었어야 했어 ..? –