Monday, July 14, 2014

Generic job for testing AIF Read operation

static void GenericReadServiceCall(Args _args)
{
    DictClass dictClass;
    anytype objEntityValue;
    anytype objValue;
    Object object;
    ExecutePermission permission;
    str strClassName="KT_ActivitiesViewService";
    str strTableName="smmActivities";
    str strRecordValue="S450247";

    str strTableMethodName="find";
    str strServiceMethodName="read";
    aifcriteriaElement criteriaElements;
    aifQueryCriteria objqueryCriteria;
    container objContainer;
    SysDictTable objSysDictTable;

    AifEntityKey           entityKey     = new AifEntityKey();
    AifEntityKeyList      entityKeyList = new AifEntityKeyList();



    objSysDictTable=new SysDictTable(tableName2Id(strTableName));
    objEntityValue=objSysDictTable.callStatic(strTableMethodName,strRecordValue); //,"CANONIMAGERUNNER");

     entityKey.parmKeyDataMap(SysDictTable::getKeyData(objEntityValue));
        entityKeyList.addEntityKey(entityKey);
    // Grants permission to execute the DictClass.callObject method.
    // DictClass.callObject runs under code access security.
    permission = new ExecutePermission();
    permission.assert();

    dictClass = new DictClass(className2Id(strClassName));
    object = dictClass.makeObject();

    if (dictClass != null)
    {
    //If it is static method
    //dictClass.callStatic(methodName);
     objValue = dictClass.callObject(strServiceMethodName, object,entityKeyList);
    }

    // Closes the code access permission scope.
    CodeAccessPermission::revertAssert();
}

Generic Job for testing AIF Find operation with criteria

static void GenericFindServiceCall(Args _args)
{
    DictClass dictClass;
    anytype objValue;
    Object object;
    ExecutePermission permission;
    str strClassName="KT_ActivitiesListService";
    str strTableName="smmActivities";
    str strMethodName="find";
    aifcriteriaElement criteriaElements,criteriaElement1,criteriaElement2;
    aifQueryCriteria objqueryCriteria;
    container objContainer;
    aifQueryCriteria queryCriteria;

    objContainer=[1,strTableName,"KTPAGING",1,1,10];

    /* = conins(c,1,"SalesTable");
    c = conins(c,2,"SalesId");
    c = conins(c,3,salesIdValue);*/
    //info(tableid2name(2303));
    //info(tableid2name(8152));
    //pause;

//    criteriaElements = aifCriteriaElement::create(objContainer)


criteriaElements = AifCriteriaElement::newCriteriaElement(tablestr(smmActivities),
                                                                                          "KTPAGING",
                                                                                          AifCriteriaOperator::Range,
                                                                                          "1","10");

    /*criteriaElements[0] = new CriteriaElement();
    criteriaElements[0].DataSourceName = "SalesTable";
    criteriaElements[0].FieldName = "SalesId";
    criteriaElements[0].Value1 = salesIdValue;*/

    objqueryCriteria = new aifQueryCriteria();


    criteriaElement1 = AifCriteriaElement::newCriteriaElement(tablestr(smmActivities),
                                                                                          fieldstr(smmActivities, Closed),
                                                                                         AifCriteriaOperator::Equal,
                                                                                          enum2str(noyes::No));
/*    criteriaElement2 = AifCriteriaElement::newCriteriaElement(tablestr(smmActivities),
    fieldstr(docuref, RefRecId),
    AifCriteriaOperator::Equal,
    "5637666290");
*/
    objqueryCriteria.addCriteriaElement(criteriaElements);
       //objqueryCriteria.addCriteriaElement(criteriaElement1);
             //   objqueryCriteria.addCriteriaElement(criteriaElement2);
    // Grants permission to execute the DictClass.callObject method.
    // DictClass.callObject runs under code access security.
    permission = new ExecutePermission();
    permission.assert();

    dictClass = new DictClass(className2Id(strClassName));
    object = dictClass.makeObject();


    if (dictClass != null)
    {
    //If it is static method
    //dictClass.callStatic(methodName);
     objValue = dictClass.callObject(strMethodName, object, objqueryCriteria);
    }

    // Closes the code access permission scope.
    CodeAccessPermission::revertAssert();

}

Generic job for testing AIF Find operation

static void GenericFindServiceCal(Args _args)
{
    DictClass dictClass;
    anytype objValue;
    Object object;
    ExecutePermission permission;
  //  str strTableName;
    str strClassName="KT_ActivitiesListService";
   // str strClassName="SalesViewQService";
    str strTableName="smmActivities";
//str strTableName="SalesLine";
    str strMethodName="find";
    aifcriteriaElement criteriaElements;
    aifQueryCriteria objqueryCriteria;
    container objContainer;
    aifQueryCriteria queryCriteria;

    objContainer=[1,strTableName,"KTPAGING",1,1,10];
   // objContainer=[1,strTableName,"Salesid",1,1,10];

    /* = conins(c,1,"SalesTable");
    c = conins(c,2,"SalesId");
    c = conins(c,3,salesIdValue);*/
    //info(tableid2name(2303));
    //info(tableid2name(8152));
    //pause;

    criteriaElements = aifCriteriaElement::create(objContainer);

    /*criteriaElements[0] = new CriteriaElement();
    criteriaElements[0].DataSourceName = "SalesTable";
    criteriaElements[0].FieldName = "SalesId";
    criteriaElements[0].Value1 = salesIdValue;*/

    objqueryCriteria = new aifQueryCriteria();
///
    objqueryCriteria.addCriteriaElement(criteriaElements);

    // Grants permission to execute the DictClass.callObject method.
    // DictClass.callObject runs under code access security.
    permission = new ExecutePermission();
    permission.assert();

    dictClass = new DictClass(className2Id(strClassName));
    object = dictClass.makeObject();


    if (dictClass != null)
    {
    //If it is static method
    //dictClass.callStatic(methodName);
     objValue = dictClass.callObject(strMethodName, object, objqueryCriteria);
    }

    // Closes the code access permission scope.
    CodeAccessPermission::revertAssert();

}

Getting document path in document handling

public str getDocPath(str type)
{
    docutype doc= docutype::find(type);
    return doc.ArchivePath;
}

Adding notes to record in document handling

public void docHandlingAddNotes(notes _notes='testNotes',RefTableId objRefTableId,RefRecId objRefRecId,Description strDescription='',str strDateAreId)
{

    docuref                         docuref;
    form                            form2;

    filename                        file, docuFilename;
    recid                           docuvaluerecid;
    docuvalue                       docuvalue;
    int                             hwnd;//wfs ctodd 6/21/2012

    docutype                        docutype;
    DocuActionArchive archive;
    System.IO.FileInfo fileInfo;
    int size;

    Filename    onlyFilename;
    Filename    curFileType;
    ;


       if(_notes)
        {
            ttsbegin;
            docuref.TypeId = "Note";
            docuref.Name   = strDescription;
            docuref.Notes  = _notes;
            docuRef.Restriction  = DocuRestriction::External;
            docuref.RefCompanyId = strDateAreId;

            docuref.RefTableId   = objRefTableId;
            docuref.RefRecId     = objRefRecId;
            docuref.insert();

/*           docuvalue.initValue();
           docuvalue.insert();
           docuref.ValueRecId = docuvalue.RecId;
           docuref.update();
           docuvaluerecid = docuvalue.RecId;
  */
           //select forupdate docuvalue where docuvalue.recid == docuvaluerecid;
           //docuvalue =  docuvalue::writeDocuValue(docuref,file);

            /*fileInfo = new System.IO.FileInfo(file);
            size = fileInfo.get_Length();
            info(strfmt("%1",size));*/

           //archive = new DocuActionArchive();
           //archive.add(docuRef, file);
           /*
           docutype = docutype::find(docuref.TypeId);
           numSeq = NumberSeq::newGetNum(DocuParameters::numRefDocuNumber(),true);
           [onlyFilename,curFileType]  = Docu::splitFilename(file);
            if(docuType.filePlace == DocuFilePlace::Archive)
            {
                docuFilename = docuRef.path()
                                + smmDocuments::getNonExistingFileName(numSeq,docuRef.path(),curFileType)
                                + '.'
                                + curFileType; //new Filename
                                //uses curFileType
                WinAPI::copyFile(filename, docuFilename);
            }
            else
            {
                docuFilename = filename;
            }

            this.insertDocuValue(docuRef,docuFilename);*/

           ttscommit;

      }
}

Using the above method
------------------------
//adding notes
    AIF_DOCHandCustomService_add.docHandlingAddNotes("Testing data......",8152,5637144709,"Testing data","ceu");

Getting file content of a record from document handling and return to device / base64 code

public notes ArchiveBlob(str strFilePath="C:\\Users\\hemamalinib\\Downloads\\T&L-TDD-V1.2.docx")
{
    Set permissionSet;
    //Hold the instance of table....
//    docuValue objdocuRef;
    //This class is used to process the blob data....
    BinData bin = new BinData();

    //Hold the instance of the encoded string format...

   System.IO.FileStream outFile;
   System.Byte[] arrByte;
   str content;
   System.Int32 j;
   container temp;
    ;
    // Assert permission.
    permissionSet =  new Set(Types::Class);
    permissionSet.add(new FileIOPermission(strFilePath ,"rw"));
    permissionSet.add(new InteropPermission(InteropKind::ClrInterop));
   //FileIOPermission fioPermission;
   //InteropPermission permission = new InteropPermission(InteropKind::ClrInterop);
   //permission.assert();
    //getting file
   //objdocuRef= docuValue::find(_valueRecId); //5637145107);

// Assert permission.
    //fioPermission = new FileIOPermission(strFilePath ,"RW");
    //fioPermission.assert();

    //arrByte= System.IO.File::ReadAllBytes(strFilePath);

    //content =System.Convert::ToBase64String(arrByte);
     //  j =  outFile.Read(arrByte, 0,outFile.
    //CodeAccessPermission::revertAssert();


    //return content;
    // outFile.Close();
  //creating BinData object from Container in the CompanyImage object
    //bin.setData(objdocuRef.File);

    CodeAccessPermission::assertMultiple(permissionSet);
    //temp = this.Job_File_IO_TextIo_Write_Read(strFilePath);
    content = this.Job_File_IO_TextIo_Write_Read(strFilePath);//con2str(temp);
    //temp = WINAPI::findFirstFile(strFilePath);
    //bin.setData(temp);
    //bin.setData(tobjdocuRef.File);
    //encoding the image to base64
    //content = bin.base64Encode();
    // Create the base64 encoded string

    //This is for testing purpose
    //arrByte =System.Convert::FromBase64String(content);
    //outFile = new System.IO.FileStream(strFilePath,System.IO.FileMode::Create,
                             //System.IO.FileAccess::Read);
    //outFile.Read(arrByte, 0, arrByte.get_Length());
    //outFile.Close();
    return content;
}

using the above method
------------------------
//getting file content and return to device
notes filedet;
   filedet = AIF_DOCHandCustomService_add.ArchiveBlob(file);


Another Way
-------------
public notes Blob(RefRecId _valueRecId)
{
    //Hold the instance of table....
    docuValue objdocuRef;
    //This class is used to process the blob data....
    BinData bin = new BinData();
    //Hold the instance of the encoded string format...
    str content;
   System.IO.FileStream outFile;
   System.Byte[] arrByte;
    //getting file
   objdocuRef= docuValue::find(_valueRecId); //5637145107);

  //creating BinData object from Container in the CompanyImage object
    bin.setData(objdocuRef.File);
    //encoding the image to base64
    content = bin.base64Encode();
    // Create the base64 encoded string
    /*
    //This is for testing purpose
    arrByte =System.Convert::FromBase64String(content);
      outFile = new System.IO.FileStream(@"D:\DocHandling\test1.docx",System.IO.FileMode::Create,
                                 System.IO.FileAccess::Write);
      outFile.Write(arrByte, 0, arrByte.get_Length());
      outFile.Close();
    */
    return content;
}

Adding file/document to record

public void docHandlingAdd(filename filename)
{
    Args                            args = new args();
    formrun                         FormRun;
    //filenameSave                    filename;
    Args                            args1 = new args();
    //wfsEMSalesOrderDocumentation    wfsEMSalesOrderDocumentation;
    docuref                         docuref;
    form                            form2;
    FilenameFilter                  _conFilter;
    filename                        file, docuFilename;
    recid                           docuvaluerecid;
    docuvalue                       docuvalue;
    int                             hwnd;//wfs ctodd 6/21/2012
    salestable                      salestable = salestable::find('SO-101342');
    docutype                        docutype;
    DocuActionArchive archive;
    System.IO.FileInfo fileInfo;
    int size;

    Filename    onlyFilename;
    Filename    curFileType;
    ;

    if(SalesTable)
    {
        _conFilter = ['All FIles','*.*'];
         //hWnd = this.hWnd();
        //file = WinAPI::getOpenFileName(infoLog.hWnd(),_conFilter,'','Select Document Path');
        file = filename;

        if(file)
        {
            ttsbegin;
            docuref.TypeId = "Test";
            docuref.Name   = "T&L-TDD-V1.2";
            docuref.Notes  = docuRef.Notes;
            docuRef.Restriction  = DocuRestriction::External;
            docuref.RefCompanyId = SalesTable.dataAreaId;
            //docuref.WfsExportType = wfsexporttype::CommercialInv;
            docuref.RefTableId   = tablenum(SalesTable);
            docuref.RefRecId     = SalesTable.RecId;
            docuref.insert();

           docuvalue.initValue();
           docuvalue.insert();
           docuref.ValueRecId = docuvalue.RecId;
           docuref.update();
           docuvaluerecid = docuvalue.RecId;

           //select forupdate docuvalue where docuvalue.recid == docuvaluerecid;
           //docuvalue =  docuvalue::writeDocuValue(docuref,file);

            /*fileInfo = new System.IO.FileInfo(file);
            size = fileInfo.get_Length();
            info(strfmt("%1",size));*/

           archive = new DocuActionArchive();
           archive.add(docuRef, file);
           /*
           docutype = docutype::find(docuref.TypeId);
           numSeq = NumberSeq::newGetNum(DocuParameters::numRefDocuNumber(),true);
           [onlyFilename,curFileType]  = Docu::splitFilename(file);
            if(docuType.filePlace == DocuFilePlace::Archive)
            {
                docuFilename = docuRef.path()
                                + smmDocuments::getNonExistingFileName(numSeq,docuRef.path(),curFileType)
                                + '.'
                                + curFileType; //new Filename
                                //uses curFileType
                WinAPI::copyFile(filename, docuFilename);
            }
            else
            {
                docuFilename = filename;
            }

            this.insertDocuValue(docuRef,docuFilename);*/

           ttscommit;

           //docuFilename = docutype.ArchivePath + "\\";
           //WinAPI::copyFile(file, docuFilename);
      }
      }
}

Using the above method
--------------------------
filename file = "C:\\Users\\hemamalinib\\Downloads\\Tips_for_Creating_Services_in_Microsoft_Dynamics_AX_2009.pdf";
    KT_DocuHandlingService AIF_DOCHandCustomService_add = new KT_DocuHandlingService();
    //adding new file/document to record
    AIF_DOCHandCustomService_add.docHandlingAdd(file);