예제 #1
0
        /// <summary>
        /// Creates a new workpacket using request and existing workpacket
        /// by updating existing workpacket with request into new workpacket
        /// </summary>
        /// <param name="sessionTokenHeader">p360 login session</param>
        /// <param name="workpacket">model workpacket retrieved from p360</param>
        /// <param name="request">request with updates to apply to workpacket</param>
        /// <returns></returns>
        public async Task <Workpacket> CreateFromWorkpacketAsync(SessionTokenHeader sessionTokenHeader, string workpacketId, Workpacket workpacket, UpdateRequest request)
        {
            // Create merged request from workpacket and request
            var fileUpdates = _workpacketUpdateDomainService.CreateFromFiles(new Files(workpacket?.Folder?.FolderItems).Add(request.GetFiles()));
            var dataUpdates = _workpacketUpdateDomainService.CreateFromDataAndWorkpacket(workpacketId, request, workpacket);

            // create p360 request
            WorkpacketUpdate[] workpacketUpdates = new WorkpacketUpdate[fileUpdates.Length + 1];
            fileUpdates.CopyTo(workpacketUpdates, 0);
            workpacketUpdates[workpacketUpdates.Length - 1] = dataUpdates;

            // execute request
            var result = await Service.CreateWorkpacketAsync(
                sessionTokenHeader,
                _p360ServiceData.CurrentValue.ProcessName,
                _p360ServiceData.CurrentValue.NodeName,
                workpacketUpdates
                );

            await Service.ForwardWorkpacketAsync(sessionTokenHeader, result.CreateWorkpacketResult.Id);

            // map
            var response = _mapper.Map <Workpacket>(result.CreateWorkpacketResult);

            return(response);
        }
예제 #2
0
        /// <summary>
        /// Creates new workpacket based on existing workpacket with property WEB_ID equals to <paramref name="workpacketId"/>
        /// if one exists;
        /// The new workpacket will have all the same attributes as base attributes with whatever changes are in <paramref name="request"/>
        /// </summary>
        /// <param name="sessionTokenHeader"></param>
        /// <param name="workpacketId"></param>
        /// <param name="request"></param>
        /// <returns></returns>
        public async Task <Workpacket> UpdateFromWorkpacketAsync(SessionTokenHeader sessionTokenHeader, string workpacketId, BaseForm request)
        {
            // search for existing workpacket to update from
            var workpacket = await _workpacketSearchService.SearchAsync(sessionTokenHeader, workpacketId);

            if (workpacket == null)
            {
                workpacket = await _workpacketSearchService.SearchArchiveAsync(sessionTokenHeader, (request.FormName, workpacketId));

                if (workpacket == null)
                {
                    throw new ArgumentException($"{nameof(workpacketId)} could not be found.");
                }
            }

            // map to p360 request
            WorkpacketUpdate[] workpacketUpdates = null;
            var dataUpdates = _workpacketUpdateDomainService.CreateFromData(request);

            if (request.Files != null && request.Files.Count > 0)
            {
                var fileUpdates = _workpacketUpdateDomainService.CreateFromFiles(new Files(request.Files));
                workpacketUpdates = new WorkpacketUpdate[fileUpdates.Length + 1];
                fileUpdates.CopyTo(workpacketUpdates, 0);
                workpacketUpdates[workpacketUpdates.Length - 1] = dataUpdates;
            }
            else
            {
                workpacketUpdates = new WorkpacketUpdate[] { dataUpdates };
            }

            // execute request
            var result = await Service.CreateWorkpacketAsync(
                sessionTokenHeader,
                _p360ServiceData.CurrentValue.ProcessName,
                _p360ServiceData.CurrentValue.NodeName,
                workpacketUpdates
                );

            await Service.ForwardWorkpacketAsync(sessionTokenHeader, result.CreateWorkpacketResult.Id);

            // map
            var response = _mapper.Map <Workpacket>(result.CreateWorkpacketResult);

            return(response);
        }