예제 #1
0
        /// <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;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
예제 #2
0
        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();
                }
            }
        }
예제 #3
0
        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("");
        }