/// <summary> /// Implementation of <see cref="IWorkflowScript.OnWorkflowScriptExecute" />. /// <seealso cref="IWorkflowScript" /> /// </summary> /// <param name="app"></param> /// <param name="args"></param> public void OnWorkflowScriptExecute(Hyland.Unity.Application app, Hyland.Unity.WorkflowEventArgs args) { args.SessionPropertyBag.TryGetValue("propPriKey", out priKey); args.SessionPropertyBag.TryGetValue("propSecKey", out secKey); Document doc = args.Document; DocumentType docType = doc.DocumentType; SetKeywordValues(doc); DocumentQuery docQuery = app.Core.CreateDocumentQuery(); docQuery.AddDocumentType(docType); KeywordType keyType = app.Core.KeywordTypes.Find(priKey); Keyword priKeyword = keyType.CreateKeyword(priVal); docQuery.AddKeyword(priKeyword); DocumentList docList = docQuery.Execute(10000); Keyword secKeyword = keyType.CreateKeyword(secVal); foreach (Document newDoc in docList) { foreach (KeywordRecord keywordRecord in newDoc.KeywordRecords) { foreach (Keyword keyword in keywordRecord.Keywords) { if (keyword.KeywordType.Name == priKey) { string priGetValToCompare = keyword.IsBlank?string.Empty:keyword.Value.ToString(); if (priGetValToCompare.Trim() == priVal.Trim()) { using (DocumentLock documentLock = newDoc.LockDocument()) { if (documentLock.Status == DocumentLockStatus.LockObtained) { KeywordModifier keymod = newDoc.CreateKeywordModifier(); keymod.UpdateKeyword(priKeyword, secKeyword); keymod.ApplyChanges(); break; } } } } } } } }
private void ModifyKeywordInCurrentDocument(Document doc, string keywordType, string keywordValue) { using (DocumentLock documentLock = doc.LockDocument()) { if (documentLock.Status == DocumentLockStatus.LockObtained) { KeywordModifier keymod = doc.CreateKeywordModifier(); KeywordType keyType = _app.Core.KeywordTypes.Find(keywordType); if (keyType == null) { keymod.AddKeyword(keywordType, keywordValue); } else { KeywordRecord keyRec = doc.KeywordRecords.Find(keyType); KeywordRecordType keyRecType = keyRec.KeywordRecordType; Keyword newKeyword = keyType.CreateKeyword(keywordValue); if (keyRecType.RecordType == RecordType.MultiInstance) { EditableKeywordRecord editKeyRec = keyRec.CreateEditableKeywordRecord(); Keyword keyword = editKeyRec.Keywords.Find(keywordType); editKeyRec.UpdateKeyword(keyword, newKeyword); keymod.AddKeywordRecord(editKeyRec); } else { Keyword keyword = keyRec.Keywords.Find(keywordType); keymod.UpdateKeyword(keyword, newKeyword); } } keymod.ApplyChanges(); } } }
public static void Reindex(Application app, string documentsDir) { logger.Info("Re-index document by updating a keyword..."); try { string filePath = documentsDir + "\\reindex.json"; if (File.Exists(filePath)) { logger.Info("Re-index config file found: " + filePath); string inputJSON = File.ReadAllText(filePath); IList <JToken> jTokens = JToken.Parse(inputJSON)["contents"].Children().ToList(); foreach (JToken jToken in jTokens) { Content content = jToken.ToObject <Content>(); logger.Info("Get Document ID: " + content.documentID); long documentId = long.Parse(content.documentID); Document document = app.Core.GetDocumentByID(documentId, DocumentRetrievalOptions.LoadKeywords); if (document == null) { throw new Exception("Document was not found"); } var keywords = document.KeywordRecords[0].Keywords.Where(x => content.keywords.Keys.Contains(x.KeywordType.Name)); using (DocumentLock documentLock = document.LockDocument()) { if (documentLock.Status != DocumentLockStatus.LockObtained) { throw new Exception("Failed to lock document"); } KeywordModifier keyModifier = document.CreateKeywordModifier(); foreach (var keyword in keywords) { logger.Info("Update Keyword: " + content.keywords[keyword.KeywordType.Name]); Keyword keywordToModify = null; switch (keyword.KeywordType.DataType) { case KeywordDataType.AlphaNumeric: keywordToModify = keyword.KeywordType.CreateKeyword(content.keywords[keyword.KeywordType.Name]); break; case KeywordDataType.Currency: case KeywordDataType.SpecificCurrency: case KeywordDataType.Numeric20: keywordToModify = keyword.KeywordType.CreateKeyword(decimal.Parse(content.keywords[keyword.KeywordType.Name])); break; case KeywordDataType.Date: case KeywordDataType.DateTime: keywordToModify = keyword.KeywordType.CreateKeyword(DateTime.Parse(content.keywords[keyword.KeywordType.Name])); break; case KeywordDataType.FloatingPoint: keywordToModify = keyword.KeywordType.CreateKeyword(double.Parse(content.keywords[keyword.KeywordType.Name])); break; case KeywordDataType.Numeric9: keywordToModify = keyword.KeywordType.CreateKeyword(long.Parse(content.keywords[keyword.KeywordType.Name])); break; } keyModifier.UpdateKeyword(keyword, keywordToModify); } keyModifier.ApplyChanges(); } logger.Info(string.Format("Keyword was successfully updated. Document Id: {0}", content.documentID)); } } } catch (Exception ex) { logger.Error(ex.Message, ex); } logger.Info(""); }