private void button1_Click(object sender, System.EventArgs e) { // OK, what are we supposed to retrieve System.Data.DataRow dtRow; int i = dgrdContainees.CurrentRowIndex; dtRow = g_dtblResults.Rows[i]; string strId = (string)dtRow["Id"]; string strContentSize = (string)dtRow["ContentSize"]; MessageBox.Show("Retrieving content for document [" + strId + "] size= " + strContentSize + " bytes."); // Retrieve the document CEWSI.ObjectRequestType objContentRequest = new CEWSI.ObjectRequestType(); CEWSI.ObjectSpecification objContentSpec = new CEWSI.ObjectSpecification(); objContentSpec.classId = "Document"; objContentSpec.objectId = strId; objContentSpec.objectStore = MainForm.Library; objContentRequest.SourceSpecification = objContentSpec; objContentRequest.id = "1"; // Ask for the content properties... CEWSI.FilterElementType[] incContentProps; if (UseGetContent) { incContentProps = new CEWSI.FilterElementType[1]; } else { incContentProps = new CEWSI.FilterElementType[2]; } incContentProps[0] = new CEWSI.FilterElementType(); incContentProps[0].Value = "ContentElements"; if (!UseGetContent) { incContentProps[1] = new CEWSI.FilterElementType(); incContentProps[1].Value = "Content"; incContentProps[1].maxSize = 1000000; incContentProps[1].maxSizeSpecified = true; } objContentRequest.PropertyFilter = new CEWSI.PropertyFilterType(); objContentRequest.PropertyFilter.IncludeProperties = incContentProps; objContentRequest.PropertyFilter.maxRecursion = 1; objContentRequest.PropertyFilter.maxRecursionSpecified = true; // Create the request array CEWSI.ObjectRequestType[] objRequestArray = new CEWSI.ObjectRequestType[1]; objRequestArray[0] = objContentRequest; // Fill in the security headers... CEWSI.FNCEWS40PortTypeClient objBinding = WSIUtil.ConfigureBinding(MainForm.User, MainForm.Domain, MainForm.Password, MainForm.URL); // Send off the request CEWSI.ObjectResponseType[] objResponses = null; try { objResponses = objBinding.GetObjects(WSIUtil.GetLocalization(), objRequestArray); } catch (System.Net.WebException ex) { MessageBox.Show("An exception occurred while querying for containees: [" + ex.Message + "]"); return; } catch (Exception allEx) { MessageBox.Show("An exception occurred: [" + allEx.Message + "]"); return; } // Did we get some content? if (objResponses.Length < 1) { MessageBox.Show("No content found"); return; } if (objResponses[0].GetType() == typeof(CEWSI.ErrorStackResponse)) { CEWSI.ErrorStackResponse errStackResponse = (CEWSI.ErrorStackResponse)objResponses[0]; CEWSI.ErrorStackType objStack = errStackResponse.ErrorStack; CEWSI.ErrorRecordType objErr = objStack.ErrorRecord[0]; MessageBox.Show("Error [" + objErr.Description + "] occurred. " + " Err source is [" + objErr.Source + "]"); return; } // Extract the document object from the response CEWSI.ObjectValue objDoc = null; if (objResponses[0].GetType() == typeof(CEWSI.SingleObjectResponse)) { CEWSI.SingleObjectResponse objResponse = (CEWSI.SingleObjectResponse)objResponses[0]; objDoc = objResponse.Object; } else if (objResponses[0].GetType() == typeof(CEWSI.ObjectSetResponse)) { CEWSI.ObjectSetResponse objSetResponse = (CEWSI.ObjectSetResponse)objResponses[0]; CEWSI.ObjectSetType objSet = objSetResponse.ObjectSet; objDoc = objSet.Object[0]; } else { MessageBox.Show("Unknown data type returned in ObjectReponse: [" + objResponses[0].GetType().ToString() + "]"); return; } // OK, we got some content. Get the bits from the response packet // First find the ContentElements property /* * if( objDoc.Property == null ) * { * MessageBox.Show("Received a document with no properties!"); * return; * } */ // Extract the content for each content element foreach (CEWSI.PropertyType objProp in objDoc.Property) { if (objProp.propertyId.ToLower().CompareTo("contentelements") == 0) { CEWSI.DependentObjectType[] contTrans = (CEWSI.DependentObjectType[])((CEWSI.ListOfObject)objProp).Value; if (contTrans == null) { MessageBox.Show("The selected document has no content"); break; } for (int nItem = 0; nItem < contTrans.Length; nItem++) { Byte[] byteContent = null; if (UseGetContent) { CEWSI.ContentRequestType crt = new CEWSI.ContentRequestType(); crt.cacheAllowed = true; crt.cacheAllowedSpecified = true; crt.id = "1"; crt.maxBytes = 100 * 1024; crt.maxBytesSpecified = true; crt.startOffset = 0; crt.startOffsetSpecified = true; crt.continueFrom = null; CEWSI.ElementSpecificationType est = new CEWSI.ElementSpecificationType(); est.itemIndex = nItem; est.itemIndexSpecified = true; est.elementSequenceNumber = 0; est.elementSequenceNumberSpecified = false; crt.ElementSpecification = est; CEWSI.ObjectSpecification objSpec = new CEWSI.ObjectSpecification(); objSpec.classId = "Document"; objSpec.objectId = strId; objSpec.objectStore = MainForm.Library; crt.SourceSpecification = objSpec; CEWSI.ContentRequestType[] contReqArray = new CEWSI.ContentRequestType[1]; contReqArray[0] = crt; CEWSI.FNCEWS40PortTypeClient binding2 = WSIUtil.ConfigureBinding(MainForm.User, MainForm.Domain, MainForm.Password, MainForm.URL); // Send off the request CEWSI.GetContentRequest gcr = new CEWSI.GetContentRequest(); gcr.ContentRequest = contReqArray; gcr.validateOnly = false; gcr.validateOnlySpecified = true; CEWSI.ContentResponseType[] contResponses = null; try { contResponses = binding2.GetContent(WSIUtil.GetLocalization(), gcr); } catch (System.Net.WebException ex) { MessageBox.Show("An exception occurred while fetching content for a content element: [" + ex.Message + "]"); return; } catch (Exception allEx) { MessageBox.Show("An exception occurred: [" + allEx.Message + "]"); return; } CEWSI.ContentResponseType crt2 = contResponses[0]; if (crt2 is CEWSI.ContentErrorResponse) { CEWSI.ContentErrorResponse cer = (CEWSI.ContentErrorResponse)crt2; CEWSI.ErrorStackType objStack = cer.ErrorStack; CEWSI.ErrorRecordType objErr = objStack.ErrorRecord[0]; MessageBox.Show("Error [" + objErr.Description + "] occurred. " + " Err source is [" + objErr.Source + "]"); return; } else if (crt2 is CEWSI.ContentElementResponse) { CEWSI.ContentElementResponse elem = (CEWSI.ContentElementResponse)crt2; CEWSI.InlineContent ic = (CEWSI.InlineContent)elem.Content; byteContent = ic.Binary; } else { MessageBox.Show("Unknown data type returned in content response: [" + crt.GetType().ToString() + "]"); return; } } // end if (UseGetContent) else { CEWSI.DependentObjectType contTran = (CEWSI.DependentObjectType)contTrans[nItem]; CEWSI.PropertyType[] props = (CEWSI.PropertyType[])contTran.Property; if (props != null) { CEWSI.ContentData contData = (CEWSI.ContentData)props[0]; CEWSI.InlineContent ic = (CEWSI.InlineContent)contData.Value; byteContent = ic.Binary; } } // Write the retrieved content out to a file System.DateTime now = System.DateTime.Now; string strFileName = "C:\\Temp\\ContentElement0"; // + nItem.ToString(); strFileName = strFileName + "_" + now.Month.ToString(); strFileName = strFileName + "_" + now.Day.ToString(); strFileName = strFileName + "_" + now.Year.ToString(); strFileName = strFileName + "_" + now.Hour.ToString(); strFileName = strFileName + "_" + now.Minute.ToString(); strFileName = strFileName + "_" + now.Millisecond.ToString(); MessageBox.Show("Saving content of size " + byteContent.Length.ToString() + " to file: " + strFileName); saveContentToFile(strFileName, byteContent); } } } }
private void btnCreate_Click_1(object sender, System.EventArgs e) { long lngPropCount = 1; long lngActionCount = 1; string strContentLocation = ""; string strRetrievalName = ""; ulong ulContentSize = 0; // If content was specified, do some sanity checks and prepare... if (chkContent.Checked) { // Extract the location, retrieval name, and MIME type if (txtContentLocation.Text == "") { MessageBox.Show("Looks like you forgot to specify a content location - aborting"); return; } if (txtMimeType.Text == "") { MessageBox.Show("Looks like you forgot to specify a MIME type - aborting"); return; } strContentLocation = txtContentLocation.Text.Replace('/', '\\'); int nStart = strContentLocation.LastIndexOf('\\'); strRetrievalName = (nStart > 1) ? strContentLocation.Substring(nStart + 1, (strContentLocation.Length - nStart - 1)) : strContentLocation; // Verify that the file exists and get its size ulContentSize = getFileContentSize(strContentLocation); if (ulContentSize == 0) { MessageBox.Show("The specified content file either does not exist, or is of zero length"); return; } lngPropCount += 1; } // Sanity checks if content by reference was specified... if (chkContentReference.Checked) { if (txtContentURL.Text == "") { MessageBox.Show("Looks like you forgot to specify a content URL - aborting"); return; } if (txtMimeType.Text == "") { MessageBox.Show("Looks like you forgot to specify a MIME type - aborting"); return; } lngPropCount += 1; } // Get the WS binding object // (this will be used to set WS-Security parameters) CEWSI.FNCEWS40PortTypeClient objBinding = WSIUtil.ConfigureBinding(MainForm.User, MainForm.Domain, MainForm.Password, MainForm.URL); // We first need to create a Create verb, populate it CEWSI.CreateAction createVerb = new CEWSI.CreateAction(); createVerb.classId = txtDocClass.Text; // If the user wants to check the document in, then we'll add a separate // Checkin verb as well CEWSI.CheckinAction checkinVerb = new CEWSI.CheckinAction(); if (chkCheckIn.Checked) { checkinVerb.checkinMinorVersion = true; checkinVerb.checkinMinorVersionSpecified = true; lngActionCount += 1; } CEWSI.ChangeRequestType objChange = new CEWSI.ChangeRequestType(); objChange.Action = new CEWSI.ActionType[lngActionCount]; objChange.Action[0] = (CEWSI.ActionType)createVerb; if (chkCheckIn.Checked) { objChange.Action[1] = (CEWSI.ActionType)checkinVerb; } objChange.TargetSpecification = new CEWSI.ObjectReference(); objChange.TargetSpecification.classId = "ObjectStore"; objChange.TargetSpecification.objectId = MainForm.Library; objChange.id = "1"; // Build a list of properties to set in the new document CEWSI.ModifiablePropertyType[] objInputProps = new CEWSI.ModifiablePropertyType[lngPropCount]; CEWSI.SingletonString objString = new CEWSI.SingletonString(); objString.Value = txtTitle.Text; objString.propertyId = "DocumentTitle"; objInputProps[0] = objString; if (chkContent.Checked || chkContentReference.Checked) { // Create content properties array // ContentTransfer elements will take three properties: // * RetrievalName // * Content // * ContentType // ContentReference elements will take two properties: // * ContentLocation // * ContentType CEWSI.PropertyType[] ctProps = null; if (chkContent.Checked) { ctProps = new CEWSI.PropertyType[3]; } else { ctProps = new CEWSI.PropertyType[2]; } // Set the ContentType property CEWSI.SingletonString typeProp = new CEWSI.SingletonString(); typeProp.propertyId = "ContentType"; typeProp.Value = txtMimeType.Text; ctProps[0] = typeProp; // Create the dependent object type object CEWSI.DependentObjectType ct = new CEWSI.DependentObjectType(); ct.dependentAction = CEWSI.DependentObjectTypeDependentAction.Insert; ct.dependentActionSpecified = true; // ContentTransfer case if (chkContent.Checked) { // create RetrievalName name property CEWSI.SingletonString nameProp = new CEWSI.SingletonString(); nameProp.propertyId = "RetrievalName"; nameProp.Value = strRetrievalName; ctProps[1] = nameProp; // create content data object CEWSI.ContentData contData = new CEWSI.ContentData(); contData.propertyId = "Content"; CEWSI.InlineContent ic = new CEWSI.InlineContent(); ic.Binary = getSouceFileContent(strContentLocation); contData.Value = ic; ctProps[2] = contData; // Dependent object is of type ContentTransfer ct.classId = "ContentTransfer"; } // ContentReference case else { // Create the ContentLocation property CEWSI.SingletonString locationProp = new CEWSI.SingletonString(); locationProp.propertyId = "ContentLocation"; locationProp.Value = txtContentURL.Text; ctProps[1] = locationProp; // Dependent object is of type ContentReference ct.classId = "ContentReference"; } // create content object list ct.Property = ctProps; CEWSI.DependentObjectType[] contentObjects = new CEWSI.DependentObjectType[1]; contentObjects[0] = ct; // Create the content element list and set it into the document's properties CEWSI.ListOfObject objContentList = new CEWSI.ListOfObject(); objContentList.propertyId = "ContentElements"; objContentList.Value = contentObjects; objInputProps[1] = objContentList; } objChange.ActionProperties = objInputProps; // Send off the request CEWSI.ChangeResponseType[] objResponseArray = null; CEWSI.ExecuteChangesRequest objRequest = new CEWSI.ExecuteChangesRequest(); objRequest.refresh = true; objRequest.refreshSpecified = true; objRequest.ChangeRequest = new CEWSI.ChangeRequestType[1]; objRequest.ChangeRequest[0] = objChange; try { objResponseArray = objBinding.ExecuteChanges(WSIUtil.GetLocalization(), objRequest); } catch (System.Net.WebException ex) { MessageBox.Show("An exception occurred while creating a document: [" + ex.Message + "]"); return; } catch (Exception allEx) { MessageBox.Show("An exception occurred: [" + allEx.Message + "]"); return; } // Created a document! Sanity check the results string strObjectId = ""; bool bFound = false; if (objResponseArray == null || objResponseArray.Length < 1) { MessageBox.Show("The change request was executed, but a valid object was not returned"); return; } CEWSI.ChangeResponseType objResponse = objResponseArray[0]; foreach (CEWSI.PropertyType objProp in objResponse.Property) { if (objProp.propertyId.CompareTo("Id") == 0) { strObjectId = IdmObjectType.getPropertyValue(objProp); bFound = true; break; } } if (!bFound) { MessageBox.Show("The document was created, but the results do not contain a document ID!"); return; } if (chkFile.Checked) { MessageBox.Show("Successfully created a document! ID = [" + strObjectId + "]. Now filing."); FileDoc(strObjectId, txtDocClass.Text, txtTitle.Text, txtFolderName.Text); } else { MessageBox.Show("Successfully created a document! ID = [" + strObjectId + "]"); } return; }
public static EcmResult CreateDoc(DocumentModel doc) { EcmResult ret = new EcmResult(); //string mimeType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; bool isCheckin = false; if (doc.IsUseCert == 1) { Addcert(doc.EcmUrl); } CEWSI.FNCEWS40PortTypeClient objBinding = WSIUtil.ConfigureBinding(doc.EcmUser, doc.EcmDomain, doc.EcmPassword, doc.EcmUrl); CEWSI.CreateAction createVerb = new CEWSI.CreateAction(); createVerb.classId = doc.DocumentClass; CEWSI.CheckinAction checkinVerb = new CEWSI.CheckinAction(); if (isCheckin) { checkinVerb.checkinMinorVersion = true; checkinVerb.checkinMinorVersionSpecified = true; } CEWSI.ChangeRequestType objChange = new CEWSI.ChangeRequestType(); objChange.Action = new CEWSI.ActionType[2]; objChange.Action[0] = (CEWSI.ActionType)createVerb; objChange.Action[1] = (CEWSI.ActionType)checkinVerb; objChange.TargetSpecification = new CEWSI.ObjectReference(); objChange.TargetSpecification.classId = "ObjectStore"; objChange.TargetSpecification.objectId = doc.ObjectStore; objChange.id = "1"; int propLength = doc.Properties != null && doc.Properties.Count > 0 ? doc.Properties.Count + 1 : 1; CEWSI.ModifiablePropertyType[] objInputProps = new CEWSI.ModifiablePropertyType[propLength]; #region properties have the must CEWSI.PropertyType[] ctProps = new CEWSI.PropertyType[3]; CEWSI.SingletonString typeProp = new CEWSI.SingletonString(); typeProp.propertyId = "ContentType"; typeProp.Value = doc.MimeTypeSource; ctProps[0] = typeProp; CEWSI.DependentObjectType ct = new CEWSI.DependentObjectType(); ct.dependentAction = CEWSI.DependentObjectTypeDependentAction.Insert; ct.dependentActionSpecified = true; CEWSI.SingletonString nameProp = new CEWSI.SingletonString(); nameProp.propertyId = "RetrievalName"; nameProp.Value = doc.FileName; ctProps[1] = nameProp; CEWSI.ContentData contData = new CEWSI.ContentData(); contData.propertyId = "Content"; CEWSI.InlineContent ic = new CEWSI.InlineContent(); ic.Binary = doc.BinaryFile; contData.Value = ic; ctProps[2] = contData; ct.classId = "ContentTransfer"; // create content object list ct.Property = ctProps; CEWSI.DependentObjectType[] contentObjects = new CEWSI.DependentObjectType[1]; contentObjects[0] = ct; // Create the content element list and set it into the document's properties CEWSI.ListOfObject objContentList = new CEWSI.ListOfObject(); objContentList.propertyId = "ContentElements"; objContentList.Value = contentObjects; objInputProps[0] = objContentList; #endregion if (doc.Properties != null && doc.Properties.Count > 0) { int i = 1; foreach (var p in doc.Properties) { CEWSI.SingletonString objProp = new CEWSI.SingletonString(); objProp.propertyId = p.Key; objProp.Value = p.Value; objInputProps[i++] = objProp; } } objChange.ActionProperties = objInputProps; // Send off the request CEWSI.ChangeResponseType[] objResponseArray = null; CEWSI.ExecuteChangesRequest objRequest = new CEWSI.ExecuteChangesRequest(); objRequest.refresh = true; objRequest.refreshSpecified = true; objRequest.ChangeRequest = new CEWSI.ChangeRequestType[1]; objRequest.ChangeRequest[0] = objChange; try { objResponseArray = objBinding.ExecuteChanges(WSIUtil.GetLocalization(), objRequest); } catch (System.Net.WebException ex) { //Console.WriteLine("An exception occurred while creating a document: [" + ex.Message + "]"); ret.ErrorCode = -1; ret.ErrorMsg = ex.ToString(); return(ret); } catch (Exception allEx) { //Console.WriteLine("An exception occurred: [" + allEx.Message + "]"); ret.ErrorCode = -1; ret.ErrorMsg = allEx.ToString(); return(ret); } // Created a document! Sanity check the results string strObjectId = ""; bool bFound = false; if (objResponseArray == null || objResponseArray.Length < 1) { ret.ErrorCode = 0; ret.ErrorMsg = "The change request was executed, but a valid object was not returned"; return(ret); } CEWSI.ChangeResponseType objResponse = objResponseArray[0]; foreach (CEWSI.PropertyType objProp in objResponse.Property) { if (objProp.propertyId.CompareTo("Id") == 0) { strObjectId = IdmObjectType.getPropertyValue(objProp); bFound = true; break; } } if (!bFound) { ret.ErrorCode = 0; ret.ErrorMsg = "The document was created, but the results do not contain a document ID"; return(ret); } //Console.WriteLine("Successfully created a document! ID = [" + strObjectId + "]. Now filing."); ret = FileDoc(new EcmInfo { DocId = strObjectId, DocClass = doc.DocumentClass, DocTitle = doc.FileName, FolderPath = doc.DestinationFolder, ObjectStore = doc.ObjectStore, User = doc.EcmUser, Domain = doc.EcmDomain, Password = doc.EcmPassword, Url = doc.EcmUrl }); ret.DocId = strObjectId; ret.FileName = doc.FileName; ret.Mime = doc.MimeTypeSource; return(ret); }