Ejemplo n.º 1
0
        public CaseObject RequestCase(string sourceAlias, string caseId, bool isEditable)
        {
            CaseMessage caseMessage = new CaseMessage(caseId, m_WorkstationId);

            caseMessage.IsCaseEditable  = isEditable;
            caseMessage.WorkstationMode = _workstationMode;
            CaseRequestMessageResponse response = new CaseRequestMessageResponse();

            CaseSource <WSCommEndpoint>             WSCommSource = FindSource <WSCommEndpoint>(sourceAlias);
            CaseSource <CaseRequestManagerEndpoint> ACSSource    = FindSource <CaseRequestManagerEndpoint>(sourceAlias);

            if (default(CaseSource <WSCommEndpoint>) != WSCommSource)
            {
                try
                {
                    response = WSCommSource.EndPoint.RequestCase(caseMessage);
                }
                catch (FaultException ex)
                {
                    throw;
                }
                catch (Exception ex)
                {
                    WSCommSource.EndPoint.Abort();
                    if (m_SysConfigMgrAccess.Contains(WSCommSource.Alias))
                    {
                        m_SysConfigMgrAccess.Delete(WSCommSource.Alias);
                    }
                    m_WSCommSources.RemoveSource(WSCommSource);

                    throw;
                }
            }
            else if (default(CaseSource <CaseRequestManagerEndpoint>) != ACSSource)
            {
                try
                {
                    response = ACSSource.EndPoint.RequestCase(caseMessage);
                }
                catch (FaultException ex)
                {
                    throw;
                }
                catch (Exception ex)
                {
                    ACSSource.EndPoint.Abort();
                    if (m_SysConfigMgrAccess.Contains(ACSSource.Alias))
                    {
                        m_SysConfigMgrAccess.Delete(ACSSource.Alias);
                    }
                    m_ACSSources.RemoveSource(ACSSource);
                    throw;
                }
            }
            else
            {
                throw new Exception(ErrorMessages.SOURCE_NOT_AVAILABLE);
            }

            CaseObject tmpCaseObj = CaseTranslator.Translate(response.file);

            if (response.AdditionalFiles != null)
            {
                foreach (KeyValuePair <FileType, String> file in response.AdditionalFiles)
                {
                    DataAttachment attach = new DataAttachment();
                    attach.attachmentId = file.Value;
                    switch (file.Key)
                    {
                    case FileType.AnalysisHistory:
                        attach.attachmentType = AttachmentType.AnalysisHistory;
                        break;

                    case FileType.FTIFile:
                        attach.attachmentType = AttachmentType.FTIImage;
                        break;

                    default:
                        attach.attachmentType = AttachmentType.Unknown;
                        break;
                    }
                    tmpCaseObj.attachments.Add(attach);
                }
            }

            tmpCaseObj.caseType = (L3.Cargo.Common.CaseType)response.caseType;

            //Case is editable if it is a primary case and case source specidies result (Decision) is enabled.
            tmpCaseObj.IsCaseEditable = (isEditable && response.IsResultEnabled);

            return(tmpCaseObj);
        }