Makro Aktivitesinde Akış Ekindeki Dosya Kartı Belgelerini Kabinete Taşıma
    • 14 Apr 2022
    • 1 Minute to read
    • Dark
      Light

    Makro Aktivitesinde Akış Ekindeki Dosya Kartı Belgelerini Kabinete Taşıma

    • Dark
      Light

    Article summary

    Makro aktivitesinde akış ekinde bulunan dosya kartı kaydına bağlı klasörlerin ve bu klasörler içindeki belgelerin Müşteri Kodu değerine göre belirlenen kabinet altında müşteri kodunun 2 basamaklı değerine göre alt klasörlerin oluşturulması ve en son klasörün müşteri kodunun tamamıyla oluşturulan bir klasör içerisinde belgelerin dosya kartında bulundukları klasörlerle beraber taşıması işlemini gerçekleştirilecek kod örneği aşağıda paylaşılacaktır.


    Senaryomuz gereği Müşteri kodumuz 0654321 olsun.


    Dosya Kartında bu müşteri numarasına ait iki adet belge olsun. Dosya Kartında birinci belge Resmi Belgeler isimli klasörde diğeri de Yazışmalar isimli klasör içinde bulunsun.


    Hedef Kabinet ismi "Müşteri" olarak belirlendi.


    Makro çalıştığında belgeler Müşteri Kabineti içerisinde aşağıdaki gibi görülecektir. 

    Bu işlemi gerçekleştiren kod aşağıdaki gibidir. 

    try
    {
       Log(string.Format("Belgelerin kabinetlere dağılması makrosu başladı.workflowId : {0} , attachment Id : {1} ",WorkflowId,AttachmentId));
       LoadObject();
       LoadAttachment();
       Log("Kart getiriliyor.");
       Log("object ıd : " + (string)AttachmentData.getAttribute("OBJECT_ID"));
       a_Card card2 = Server.productivity.rCard.GetCard(new ObjectID((string)AttachmentData.Get("OBJECT_ID")), true);
       Log("1");
       ObjectID obid;
       Log("object id : " + (string)AttachmentData.getAttribute("OBJECT_ID"));
       string targetPath = string.Empty;
       string customerID = string.Empty;
       Log("Kart bilgileri alınıyor.");
          
       foreach (a_SeperatorInfo item in card2.CardSeperator.Seperators)
       {
          Log("Seperatör bilgileri yükleniyor.");
          Log("İşlem yapılan seperatör:" +item.SeperatorName);
          obid = item.SeperatorId;
          Log("Kart oluştu, object Id : "+ obid.ToString());
          a_NavigationInfo getFolderFile =Server.productivity.rNavigation.GetFolderFiles(string.Empty, obid, true,2,1,
                string.Empty,string.Empty,string.Empty,string.Empty,
                      string.Empty,string.Empty);     
    
          foreach (PW_SYSOBJECT obj in getFolderFile.folderObjects)
          {
             ObjectID fileObjectId = new ObjectID(obj.OBJECT_ID);     
             customerID = ((string)AttachmentData.getAttribute("MUSTERI_KODU")).PadLeft(7,"0"[0]);
             Log("İşlem yapılan belge: {0}"+ obj.OBJECT_NAME);
             Log("Taşınan belgenin nesne numarası "+ fileObjectId);
             StringBuilder sb = new StringBuilder(@"Kabinetler\Müşteri");
             string strA = customerID;
             string[] split = new string[strA.Length / 2 + (strA.Length % 2 == 0 ? 0 : 1)];
    
             for (int i = 0; i < split.Length - 1; i++)
             {
                sb.Append("\\");
                sb.Append(strA.Substring(i * 2, i * 2 + 2 > strA.Length ? 1 : 2));
             }
    
             sb.Append("\\");
             sb.Append(customerID);
             string targetPath2 = string.Format(sb.ToString() + "\\Müşteri Resmi Evrakları\\{0}",item.SeperatorName);
             Log("Hedef kabinet:"+targetPath2);
             a_PathInfo pi1 = Server.productivity.rNavigation.CreateFolderByPath(targetPath2, new ObjectID((string)AttachmentData.getAttribute("ACL_ID")), false);
             if (pi1.ErrorCode != 0) throw new Exception(string.Format("Kabinet yolu yaratılamadı!"));
    
             ObjectID targetFolderId = new ObjectID(pi1.ObjectList[pi1.ObjectList.Count - 1]);
             ObjectID currentFolderId = new ObjectID(obj.OBJECT_ID);
    
             Server.productivity.rNavigation.MoveObject(fileObjectId, targetFolderId, 1);         
          }
    
       }
       SaveObject();
    }
       catch(Exception ex)
    {
       Log("Hata:"+ex.Message+ "-" + WorkflowId);
       var hata = string.Empty;
       hata=ex.Message;
       if(hata=="Object reference not set to an instance of an object."){
          FormData.Set("MAKRO_HATASI",hata + "-" + WorkflowId + " Nolu Akış Ekinde Dosya Kartı Bulunamadı!...");
          FormData.Set("MAKRO_DURUMU","Hata");
    }
    else
    {
       FormData.Set("MAKRO_HATASI",hata);
       FormData.Set("MAKRO_DURUMU","Hata");  
    }
    SaveObject();
    return  true;
    }

    Örnek bir çalışmanın videosu aşağıda paylaşılmıştır.