private string BuildSoapRequest(List list, NintexWorkflowDefinition workflowModel)
        {
            //var encodedXml = workflowModel.WorkflowXml.Replace("&", "&amp;").Replace("<", "&lt;").Replace(">", "&gt;").Replace("\"", "&quot;").Replace("'", "&apos;");
            var encodedXml          = System.Net.WebUtility.HtmlEncode(workflowModel.WorkflowXml);
            var listTitle           = list != null ? list.Title : String.Empty;
            var workflowName        = workflowModel.Name;
            var saveIfCannotPublish = Boolean.TrueString.ToLower();
            var request             = String.Format(SoapPublishFromNWFXmlRequstTemplate, encodedXml, listTitle, workflowName, saveIfCannotPublish);

            return(request);
        }
예제 #2
0
        private void DeployNintexWorkflow(ListModelHost listModelHost, NintexWorkflowDefinition workflowDefinition)
        {
            var list = listModelHost.HostList;

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioning,
                Object           = workflowDefinition,
                ObjectType       = typeof(NintexWorkflowDefinition),
                ObjectDefinition = workflowDefinition,
                ModelHost        = list
            });

            // TODO, add NintexWorkflowService web service ref

            //using (var nintexService = new NintexWorkflowService.NintexWorkflowWS())
            //{
            //    nintexService.Url = SPUrlUtility.CombineUrl(list.ParentWeb.Url, NintexUrls.WorkflowServiceUrl);
            //    nintexService.PreAuthenticate = true;
            //    nintexService.Credentials = System.Net.CredentialCache.DefaultCredentials;

            //    var xmlnw = Encoding.UTF8.GetString(workflowDefinition.WorkflowXml);

            //    var result = nintexService.PublishFromNWFXml(xmlnw, list.Title, workflowDefinition.WorkflowName, true);
            //}

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioned,
                Object           = workflowDefinition,
                ObjectType       = typeof(NintexWorkflowDefinition),
                ObjectDefinition = workflowDefinition,
                ModelHost        = list
            });
        }
예제 #3
0
 public static ModelNode AddNintexWorkflow(this ModelNode model, NintexWorkflowDefinition definition, Action <ModelNode> action)
 {
     return(model.AddDefinitionNode(definition, action));
 }
예제 #4
0
 public static ModelNode AddNintexWorkflow(this ModelNode model, NintexWorkflowDefinition definition)
 {
     return(AddNintexWorkflow(model, definition, null));
 }
        public override void DeployModel(object modelHost, DefinitionBase model)
        {
            NintexWorkflowDefinition WorkflowModel = (NintexWorkflowDefinition)model;

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioning,
                Object           = null,
                ObjectType       = typeof(Object),
                ObjectDefinition = WorkflowModel,
                ModelHost        = modelHost
            });

            // https://help.nintex.com/en-US/sdks/sdk2013/#Walkthroughs/WK_Prc_NWF2013_exportandpublishaworkflow.htm%3FTocPath%3DNintex%2520Software%2520Development%2520Kit%7CModifying%2520and%2520Extending%2520Nintex%2520Workflow%2520and%2520Forms%7C_____5

            base.DeployModel(modelHost, model);

            var listModelHost = modelHost as ListModelHost;
            var baseModelHost = modelHost as CSOMModelHostBase;

            var web           = baseModelHost.HostWeb;
            var list          = listModelHost != null ? listModelHost.HostList : null;
            var clientContext = baseModelHost.HostClientContext;

            var formDigestValue = clientContext.GetFormDigestDirect().DigestValue;
            var publishUrl      = UrlUtility.CombineUrl(web.Url, "/_vti_bin/NintexWorkflow/Workflow.asmx");

            using (var executor = clientContext.WebRequestExecutorFactory.CreateWebRequestExecutor(clientContext, publishUrl))
            {
                executor.RequestMethod      = "POST";
                executor.RequestContentType = "text/xml; charset=utf-8";
                executor.RequestHeaders.Add("X-RequestDigest", formDigestValue);
                executor.RequestHeaders.Add("SOAPAction", "\"http://nintex.com/PublishFromNWFXml\"");
                executor.RequestHeaders.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate");
                executor.WebRequest.AutomaticDecompression = DecompressionMethods.GZip;

                HttpWebRequest request = executor.WebRequest;
                ClientRuntimeContext.SetupRequestCredential(clientContext, request);
                var FireExecutingWebRequestEventInternalMethod = typeof(ClientContext).GetMethod("FireExecutingWebRequestEventInternal",
                                                                                                 BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
                FireExecutingWebRequestEventInternalMethod.Invoke(clientContext, new object[] { new WebRequestEventArgs(executor) });

                var requestStream = executor.GetRequestStream();
                using (var streamWriter = new StreamWriter(requestStream, Encoding.UTF8))
                {
                    var formatedString = BuildSoapRequest(list, WorkflowModel);
                    streamWriter.Write(formatedString);
                }
                requestStream.Close();

                var result   = "";
                var response = request.GetResponse();
                using (StreamReader sr = new StreamReader(response.GetResponseStream()))
                {
                    result = sr.ReadToEnd();
                    result = ReadSoapResponse(result);
                }


                //executor.Execute();

                //var result = ReadSoapResponse(executor);

                InvokeOnModelEvent(this, new ModelEventArgs
                {
                    CurrentModelNode = null,
                    Model            = null,
                    EventType        = ModelEventType.OnProvisioned,
                    Object           = result,
                    ObjectType       = typeof(string),
                    ObjectDefinition = WorkflowModel,
                    ModelHost        = modelHost
                });
            }
        }