मैं एक कस्टम मॉड्यूल बनाना चाहता हूं जो जेनरेट की गई पीडीएफ फाइलों का नाम बदलकर जेनरेट फ़ाइल नाम स्ट्रिंग लेकर इंडेक्स फ़ील्ड, बैच फ़ील्ड इत्यादि से कुछ फ़ील्ड मानों को शामिल करता है।

तो जब बैच प्रोसेसिंग की बात आती है तो मैं इसके लिए जा सकता हूं (setupTransformator में कस्टम स्टोरेज स्ट्रिंग्स से पार्स किए गए मान शामिल हैं)

    public void ProcessBatch(IBatch batch)
    {
        IACDataElement batchElement = GetBatchElementFromBatch(batch);
        IACDataElementCollection currentDocuments = GetDocumentsFromBatchElement(batchElement);
        IACDataElement customStorageStrings = GetCustomStorageStringsFromBatch(batch);
        IACDataElementCollection batchFields = GetElementsByName(batchElement, ResourcesKofax.BATCH_FIELDS, ResourcesKofax.BATCH_FIELD);

        setupTransformator = new SetupTransformator(customStorageStrings);

        for (int i = 0; i < currentDocuments.Count; i++)
        {
            int currentDocumentIndex = i + 1;
            IACDataElement currentDocument = currentDocuments[currentDocumentIndex];
            IACDataElementCollection indexFields = GetElementsByName(currentDocument, ResourcesKofax.INDEX_FIELDS, ResourcesKofax.INDEX_FIELD);

            string targetFilename = setupTransformator.GetFilename(batchElement, currentDocument, batchFields, indexFields);

            string documentFilePath = currentDocument[ResourcesKofax.PDF_GENERATION_FILE_NAME];

            // rename the PDF file
        }

        batch.BatchClose(KfxDbState.KfxDbBatchReady, KfxDbQueue.KfxDbQueueNext, 0, string.Empty);
    }

    private IACDataElement GetBatchElementFromBatch(IBatch batch)
    {
        IACDataElement rootElement = batch.ExtractRuntimeACDataElement(0);
        return rootElement.FindChildElementByName(ResourcesKofax.BATCH);
    }

    private IACDataElementCollection GetDocumentsFromBatchElement(IACDataElement batchElement)
    {
        return GetElementsByName(batchElement, ResourcesKofax.DOCUMENTS, ResourcesKofax.DOCUMENT);
    }

    private IACDataElement GetCustomStorageStringsFromBatch(IBatch batch)
    {
        IACDataElement setupElement = batch.ExtractSetupACDataElement(0);
        IACDataElementCollection batchClasses = GetElementsByName(setupElement, ResourcesKofax.BATCH_CLASSES, ResourcesKofax.BATCH_CLASS);
        IACDataElement batchClass = batchClasses[1];
        return batchClass.FindChildElementByName(ResourcesKofax.BATCH_CLASS_CUSTOM_STORAGE_STRINGS);
    }

    private IACDataElementCollection GetElementsByName(IACDataElement dataElement, string rootName, string targetName)
    {
        return dataElement.FindChildElementByName(rootName).FindChildElementsByName(targetName);
    }

क्या मुझे File.Move पद्धति का उपयोग करना होगा या कोफैक्स पुस्तकालय से कोई विधि है जिसका मैं उपयोग कर सकता हूं?

1
hrp8sfH4xQ4 26 जून 2019, 18:36

2 जवाब

सबसे बढ़िया उत्तर

फ़ाइल नामों को केवल निर्यात कनेक्टर्स द्वारा नियंत्रित किया जाना चाहिए। जब तक बैच सिस्टम में है तब तक आपको उनके नाम नहीं बदलने चाहिए क्योंकि इससे डेटा हानि और भ्रष्टाचार हो सकता है।

यह विशेष रूप से पीडीएफ के नाम के लिए फ़ील्ड मानों का उपयोग करते समय लागू होता है - चूंकि जब तक बैच सिस्टम में है, तब तक मान परिवर्तन के अधीन हैं, आप इसे कैसे समायोजित करेंगे? कुछ भी नहीं आपके उपयोगकर्ताओं को आपके कस्टम मॉड्यूल में बैच को संसाधित करने से रोक रहा है और बैच को सत्यापन पर वापस सेट कर रहा है और एक या अधिक फ़ील्ड बदल रहा है।

एक्सपोर्ट कनेक्टर और उसके एपीआई की बात करें तो:

डिफ़ॉल्ट रूप से, कोफ़ैक्स एक पीडीएफ निर्यात करने के लिए दो तरीके प्रदान करता है - दोनों ReleaseData ऑब्जेक्ट पर (यह एपीआई डॉक्स से लिया गया है):

  • CopyKofaxPDFFile: किसी दस्तावेज़ से संबंधित PDF फ़ाइल को निर्यात सेटअप के दौरान परिभाषित निर्यात PDF पथ में कॉपी करें।
  • CopyKofaxPDFFileToPath: किसी दस्तावेज़ से संबंधित पीडीएफ फाइल को एक निर्दिष्ट पथ में कॉपी करें (पथ इस विधि के लिए एक स्ट्रिंग इनपुट तर्क है)।

दोनों विधियां उस चीज़ का उपयोग करती हैं जिसे आप सेटअप के दौरान परिभाषित कर सकते हैं - उदाहरण के लिए, CopyKofaxPDFFile KofaxPDFPath संपत्ति का उपयोग करता है। मुझे यकीन नहीं है कि फ़ाइल नाम के लिए कोई संपत्ति आरक्षित है या नहीं।

मैं आमतौर पर रनटाइम के दौरान उजागर KofaxPDFProperty के साथ रहता हूं और एक File.Copy ऑपरेशन करता हूं। मैं फ़ाइल को स्थानांतरित करने या इसे हटाने की अनुशंसा नहीं करता क्योंकि बैच सफलतापूर्वक निर्यात होने के बाद केसी स्वचालित रूप से संभालता है (सिद्धांत रूप में, एक और निर्यात हो सकता है, या निर्यात विफल हो सकता है)।

पीडीएफ के अंतिम नाम को परिभाषित करने के लिए फ़ील्ड मानों और स्ट्रिंग इंटरपोलेशन तक पहुंचने के लिए ReleaseData ऑब्जेक्ट का उपयोग करें।

2
Wolfgang Radl 27 जून 2019, 02:08

वोल्फगैंग रैडल्स का जवाब सही है। इस तथ्य के कारण मुझे एक कस्टम मॉड्यूल के साथ परियोजना को हल करना है, मेरा समाधान निम्नलिखित है:

"फाइलनाम" नामक एक इंडेक्सफील्ड मौजूद होना चाहिए। वर्तमान दस्तावेज़ को संसाधित करते समय मैं इस अनुक्रमणिका फ़ील्ड को नए फ़ाइल नाम से भर सकता हूं।

    private void SetTargetFilename(IACDataElement batchElement, IACDataElement currentDocument, IACDataElementCollection batchFields, IACDataElementCollection indexFields)
    {
        // Get the file name from the custom storage strings
        string targetFilename = setupTransformator.GetFilename(batchElement, currentDocument, batchFields, indexFields);

        try
        {
            foreach (IACDataElement field in indexFields)
            {
                // ResourcesKofax.FIELD_NAME stands for "Name"
                // ResourcesKofax.FIELD_VALUE stands for "Value"
                // ResourcesKofax.INDEX_FIELD_FILENAME stands for "Filename"
                if (field[ResourcesKofax.FIELD_NAME] == ResourcesCommon.INDEX_FIELD_FILENAME)
                {
                    field[ResourcesKofax.FIELD_VALUE] = targetFilename;
                }
            }
        }
        catch (Exception exception)
        {
            throw exception;
        }
    }

अब निर्यात कनेक्टर अनुक्रमणिका फ़ील्ड से नए फ़ाइल नाम को पढ़ने में सक्षम है।

1
hrp8sfH4xQ4 27 जून 2019, 11:07