إنشاء حزم للأداة Package Deployer

تسمح الأداة Package Deployer للمسؤولين بنشر الحزم على مثيلات Microsoft Dataverse. بإمكان Package Deployer الحزمة أن تتكون من أي أو من كل ما يلي:

  • ملف حلول Dataverse واحدًا أو أكثر.
  • ملفات ثابتة أو ملفات بيانات تم تصديرها من أداة ترحيل التكوين‬. لمزيد من المعلومات حول الإدارة، راجع نقل بيانات التكوين عبر المثيلات والمؤسسات باستخدام أداة ترحيل التكوين.
  • التعليمات البرمجية المخصصة التي يمكن تشغيلها قبل نشر الحزمة أو أثناء أو بعد نشر الحزمة إلى مثيل Dataverse.
  • محتوى HTML المحدد للحزمة والذي يمكن عرضه في بداية عملية نشر الحزمة ونهايتها. قد يكون هذا المحتوى مفيداً لتوفير وصف للحلول والملفات التي يتم نشرها في الحزمة.

‏‫ملاحظة‬

يوجد نوع حزمة آخر يسمى حزمة المكونات الإضافية. هذا النوع من الحزم مخصص للتجمعات التابعة للمكونات الإضافية وليس له علاقة بحزم Package Deployer.

المتطلبات

  • تأكد من أن لديك كل الحلول والملفات الأخرى الجاهزة التي تريد تضمينها في الحزمة.
  • Visual Studio 2019 أو احدثا Visual Studio Code.

نظرة عامة على العملية

لانشاء Package Deployer الحزمة، قم بالخطوات التالية.

  • إنشاء Visual Studio أو مشروع MSBuild
  • إضافة الحلول والملفات الأخرى إلى المشروع
  • تحديث ملفات HTML الموفرة (اختياري)
  • تحديد قيم التكوين الخاصة بالحزمة
  • تحديد الرمز المخصص للحزمة
  • إنشاء الحزمة ونشرها

يتم وصف هذه الخطوات بالتفصيل في هذه المقالة.

إنشاء مشروع حزمة

الخطوة الأولى هي إنشاء Visual Studio أو مشروع MSBuild للحزمة. للقيام بذلك، يجب أن يكون لديك واحد من اثنين من ملحقات الأدوات المتاحة المثبتة على جهاز الكمبيوتر الخاص بك. باستخدام Visual Studio Code, قم بتثبيت Microsoft Power Platform CLI. خلاف ذلك، في حالة استخدام Visual Studio 2019, تثبيت Power Platform tools ل Visual Studio. الامتداد Power Platform tools متاح حاليًا فقط لـ Visual Studio 2019. ومع ذلك، يمكن إنشاء المشروع الذي تم إنشاؤه باستخدام Visual Studio لعام 2019 أو أحدث.

حدد علامة التبويب المناسبة أدناه لمعرفة كيفية إنشاء مشروع باستخدام ملحق الأداة المطلوب. كلتا الأداتين تخرج المشروع بتنسيق مماثل.

قم بتشغيل الأمر pac package init لإنشاء الحزمة الأولية. لمزيد من المعلومات: راجع ‎pac package

pac package init help
pac package init --outputDirectory DeploymentPackage

تحتوي مخرجات CLI الناتجة على المجلدات والملفات الموضحة أدناه. تم استخدام اسم المجلد "DeploymentPackage" هنا كمثال.

C:.
└───DeploymentPackage
    │   DeploymentPackage.csproj
    │   PackageImportExtension.cs
    │
    └───PkgAssets
            ImportConfig.xml
            manifest.ppkg.json

في المشروع الذي تم إنشاؤه، ابحث عن ملف التكوين ImportConfig.xml في المجلد PkgAssets والملف PackageImportExtension.cs. ستقوم بتعديل هذه الملفات كما هو موضح لاحقًا في هذه المقالة.

إضافة ملفات الحزم

بعد إنشاء مشروع الحزمة، يمكنك البدء في إضافة الحلول والملفات الأخرى إلى هذا المشروع.

عند استخدام CLI، يمكنك إضافة حزم وحلول ومراجع خارجية إلى مشروع الحزمة الخاص بك باستخدام أحد الأوامر الفرعية إضافة. أدخل pac package helpللاطلاع على قائمة الأوامر الفرعية. دعنا نضيف حلاً لحزمتنا.

> pac package add-solution help

Commands:
Usage: pac package add-solution --path [--import-order] [--skip-validation] [--publish-workflows-activate-plugins] [--overwrite-unmanaged-customizations] [--import-mode] [--missing-dependency-behavior] [--dependency-overrides]

> cd .\DeploymentPackage\
> pac package add-solution --path ..\TestSolution_1_0_0_1_managed.zip

The item was added successfully.

تكوين الحزمة

  1. قم بتعريف تكوين الحزمة عن طريق إضافة معلومات حول حزمتك في ملف ImportConfig.xml في المشروع. افتح الملف لتحريره. توفر القائمة التالية معلومات عن كل معلمة وعقدة في ملف التكوين.

    installsampledata
    True أو false. إذا كانت القيمة true، فقم بتثبيت عينة البيانات في مثيل Dataverse. هذه البيانات هي عينة البيانات نفسها التي يمكنك تثبيتها من منطقة الإعدادات>إدارة البيانات في Dataverse.

    waitforsampledatatoinstall
    صواب‏‎ أو خطأ‏‎. إذا كانت القيمة صواب، وإذا تم تعيين installsampledata إلى صواب‏‎ أيضًا، فانتظر تثبيت عينة البيانات قبل نشر الحزمة.

    ‏‫ملاحظة‬

    تأكد من تعيين installsampledata إلى صواب إذا كنت تقوم بتعيين waitforsampledatatoinstall إلى صواب‏‎.

    agentdesktopzipfile
    اسم الملف الخاص بملف zip لفك الحزمة. إذا قمت بتحديد اسم ملف zip. هنا، فسيضيف شاشة اثناء عملية نشر الحزمة التي تطالبك بتحديد موقع حيث تريد فك حزمة محتويات الملف.

    وتُستخدم هذه السمة عادةً لإنشاء حزم Unified Service Desk لـ Dynamics 365. لمزيد من المعلومات حول Unified Service Desk، راجع دليل إدارة Unified Service Desk 3.0.

    agentdesktopexename
    اسم ملف exe. أو msi. الموجودين في ملف zip أو URL لاستدعائه في نهاية عملية النشر.

    وتُستخدم هذه السمة عادةً لإنشاء حزم Unified Service Desk.

    crmmigdataimportfile
    اسم الملف لملف بيانات التكوين الافتراضي (zip.) الذي تم تصديره باستخدام أداة ترحيل التكوين.

    • يمكنك أيضًا استيراد إصدار مترجم من ملف بيانات التكوين استنادًا إلى معرف الإعدادات المحلية (LCID) المحدد باستخدام إعدادات وقت التشغيل الجديدة اثناء تشغيل Package Deployer. استخدم العقدة <cmtdatafile> (سيتم شرحها لاحقًا) لتحديد الإصدارات المترجمة من ملف بيانات التكوين في حزمة ثم استخدم أسلوب OverrideConfigurationDataFileLanguage (سيتم شرحه لاحقًا) لتحديد منطق استيراد ملف بيانات التكوين استنادًا إلى معرف الإعدادات المحلية المحدد باستخدام إعدادات وقت التشغيل. لا يمكن استيراد أكثر من ملف بيانات تكوين باستخدام حزمة في المرة الواحدة.

    • بالنسبة إلى Dataverse (محليًا)، إذا كان ملف بيانات التكوين الخاص بك يحتوي على معلومات المستخدم، وكل من المصدر والهدف Dataverse المثيلات موجودة على نفس مجال Active Directory، ويتم استيراد معلومات المستخدم إلى Dataverse الهدف. لاستيراد معلومات المستخدم إلى مثيل Dataverse (محلي) إلى مجال مختلف، يجب تضمين ملف خريطة المستخدم (xml.) الذي تم إنشاؤه باستخدام أداة ترحيل التكوين. في مشروعك، وتحديده مع ملف بيانات التكوين باستخدام السمة usermapfilename في العقدة <cmtdatafile> التي سيرد شرحها لاحقًا. لا يمكن استيراد معلومات المستخدم إلى مثيلات Dataverse.
      <solutions> عقدة
      تحتوي على صفيف من عقد <configsolutionfile> التي تصف الحلول التي سيتم استيرادها. يشير ترتيب الحلول ضمن هذه العقدة إلى الترتيب الذي سيتم استيراد الحلول به على مثيل Dataverse الهدف.

      <configsolutionfile> عقدة
      استخدم هذه العقدة تحت العقدة <solutions> لتحديد الحلول الفردية والمعلومات التالية لكل حل يتم استيراده:

    • solutionpackagefilename: حدد اسم ملف zip. للحل. مطلوب.

    • overwriteunmanagedcustomizations: حدد ما إذا كنت تريد الكتابة فوق التخصيصات غير المدارة عند استيراد حل موجود بالفعل في مثيل Dynamics 365 الهدف. هذه السمة اختيارية، وإذا لم تحدد هذه السمة، فسيتم الاحتفاظ بالتخصيصات غير المُدارة في الحل الحالي بشكل افتراضي على مثيل Dynamics 365 الهدف.

    • publishworkflowsandactivateplugins: حدد ما إذا كنت تريد نشر مهام سير العمل وتنشيط المكونات الإضافية في مثيل Dynamics 365 الهدف بعد استيراد الحل. هذه السمة اختيارية، وإذا لم تحددها فلا تحددها، فسيتم نشر مهام سير العمل بشكل افتراضي ويتم تنشيط المكونات الإضافية بعد استيراد الحل على مثيل Dynamics 365 الهدف.

      يمكنك إضافة أسماء متعددة لملفات الحلول في حزمة من خلال إضافة العدد الذي تريده من عقد <configsolutionfile>. على سبيل المثال، إذا أردت استيراد ثلاثة ملفات حلول، أضفها كما هو مبين أدناه:

    
    <solutions>  
    <configsolutionfile solutionpackagefilename="SampleSolutionOne_1_0_managed.zip"  
    overwriteunmanagedcustomizations="false"  
    publishworkflowsandactivateplugins="true"/>  
    <configsolutionfile solutionpackagefilename="SampleSolutionTwo_1_0_managed.zip"  
    overwriteunmanagedcustomizations="false"  
    publishworkflowsandactivateplugins="true"/>  
    <configsolutionfile solutionpackagefilename="SampleSolutionThree_1_0_managed.zip" />  
    </solutions>  
    
    

    <filestoimport> عقدة
    تحتوي على صفيف من عقد <configimportfile> و<zipimportdetails> التي يتم استخدامها لوصف الملفات الفردية وملفات zip التي يجب استيرادها على التوالي.

    <configimportfile> عقدة
    استخدم هذه العقدة تحت العقدة <configimportfile> لوصف ملف لاستيراده إلى Dataverse. يمكنك إضافة ملفات متعددة في حزمة من خلال إضافة العدد الذي تريده من عقد <configimportfile>.

    
    <filestoimport>  
    <configimportfile filename="File.csv"  
    filetype="CSV"  
    associatedmap="FileMap"  
    importtoentity="FileEntity"  
    datadelimiter=""  
    fielddelimiter="comma"  
    enableduplicatedetection="true"  
    isfirstrowheader="true"  
    isrecordownerateam="false"  
    owneruser=""  
    waitforimporttocomplete="true" />  
    <configimportfile filename="File.zip"  
    filetype="ZIP"  
    associatedmap="FileMapName"  
    importtoentity="FileEntity"  
    datadelimiter=""  
    fielddelimiter="comma"  
    enableduplicatedetection="true"  
    isfirstrowheader="true"  
    isrecordownerateam="false"  
    owneruser=""  
    waitforimporttocomplete="true"/>  
    
    </filestoimport>  
    
    

    فيما يلي قائمة بالسمات المدعومة:

    السمة الوصف
    filename اسم الملف الذي يحتوي على البيانات المستوردة. إذا كان الملف عبارة عن ملف zip.، فيلزم وجود عقدة <zipimportdetails> مع عقدة <zipimportdetail> لكل ملف في ملف zip.
    filetype يمكن أن تكون هذه القيمة csv أو xml أو zip.
    associatedmap اسم مخطط بيانات الاستيراد في Dataverse الذي سيتم استخدامه مع هذا الملف. إذا كان فارغًا، فسيحاول استخدام اسم مخطط بيانات الاستيراد المحدد بواسطة النظام لهذا الملف.
    importtoentity بإمكانه أن يكون اسم ملف exe في ملف zip أو عنوان URL أو ملف msi. لتوفير ارتباط لاستدعائه في نهاية العملية.
    datadelimiter اسم محدِّد البيانات المستخدم في ملف الاستيراد. القيم الصالحة هي علامات اقتباس مفردة أو علامات اقتباس مزدوجة.
    fielddelimiter اسم محدِّد الحقل المستخدم في ملف الاستيراد. القيم الصالحة هي الفاصلة أو النقطتين أو علامة الاقتباس الفردية.
    enableduplicatedetection للإشارة إلى ما إذا كان يجب تمكين قواعد الكشاف عن التكرارات عند استيراد البيانات. القيم الصالحة هي صواب أو خطأ.
    isfirstrowheader يُستخدم للإشارة إلى أن الصف الأول من ملف الاستيراد يحتوي على أسماء الحقول. القيم الصالحة هي true أو false.
    isrecordownerateam يُشير إلى ما إذا كان يجب على مالك السجل الذي سيتم استيراده أن يكون فريقًا. القيم الصالحة هي true أو false.
    owneruser يشير إلى معرف المستخدم الذي يجب أن يمتلك السجلات. القيمة الافتراضية هي المستخدم الذي سجل دخوله في الوقت الحالي.
    waitforimporttocomplete إذا كانت القيمة true، ينتظر النظام حتى اكتمال الاستيراد قبل المتابعة. وإذا كانت القيمة false، فسيضع المهام في قائمة انتظار ويتابع.

    <zipimportdetails> عقدة
    تحتوي هذه العقدة على صفيف من عقد <zipimportdetail> التي تصف الملفات المضمنة في ملف zip يستخدم للاستيراد إلى Dynamics 365.

    <zipimportdetail> عقدة
    استخدم هذه العقدة أسفل العقدة <zipimportdetails> لتوفير معلومات حول ملف فردي في ملف zip. محدد في العقدة <configimportfile>.

    <filestoimport>  
    ...  
    ...  
    <zipimportdetails>  
    <zipimportdetail filename="subfile1.csv" filetype="csv" importtoentity="account" />  
    <zipimportdetail filename="subfile2.csv" filetype="csv" importtoentity="contact" />  
    </zipimportdetails>  
    </filestoimport>  
    
    

    السمات المدعومة مذكورة أدناه:

    السمة الوصف
    filename اسم الملف الذي يحتوي على البيانات المستوردة.
    filetype يمكن أن تكون هذه القيمة csv أو xml.
    importtoentity بإمكانه أن يكون اسم ملف exe في ملف zip أو عنوان URL أو ملف msi. لتوفير ارتباط لاستدعائه في نهاية العملية.

    <filesmapstoimport> عقدة
    تحتوي هذه العقدة على صفيف من عقد <configmapimportfile> التي سيتم استيرادها. يشير ترتيب ملفات الخرائط في هذه العقدة إلى الترتيب الذي يتم استيرادها به. للحصول على معلومات حول خرائط البيانات، راجع إنشاء خرائط بيانات لاستيرادها.

    <configimportmapfile> عقدة
    استخدم هذه العقدة تحت العقدة <filesmapstoimport> لتوفير معلومات حول ملف خريطة فردي لاستيراده إلى Dataverse.

    <filesmapstoimport>  
    <configimportmapfile filename="FileMap.xml" />  
    </filesmapstoimport>  
    

    <cmtdatafiles> عقدة
    تحتوي هذه العقدة على صفيف من عقد <cmtdatafile> التي تحتوي على نسخة مترجمة من ملف بيانات التكوين المراد استيراده.

    <cmtdatafile> عقدة
    استخدم هذه العقدة تحت العقدة <cmtdatafiles> لتحديد ملفات بيانات التكوين المترجمة إلى جانب معرف الإعدادات المحلية (مطلوب) وملف خريطة معلومات المستخدم (اختياري). على سبيل المثال:

    <cmtdatafiles>  
    <cmtdatafile filename="data_1033.zip" lcid="1033" usermapfilename="UserMap.xml" />  
    <cmtdatafile filename="data_1041.zip" lcid="1041" usermapfilename="" />  
    </cmtdatafiles>  
    

    يمكنك تعريف منطقك المخصصة في أسلوب OverrideConfigurationDataFileLanguage (سيتم شرحه لاحقًا) لاستيراد ملف بيانات تكوين مترجم بدلاً من الافتراضي المترجم (محدد في crmmigdataimportfile) استنادًا إلى قيمة معرف الإعدادات المحلية (LCID) المحددة باستخدام إعدادات وقت التشغيل (سيتم شرحه لاحقًا).

  2. حدد حفظ الكل.

    يمثل ملف XML التالي محتويات العينة ImportConfig.xml.

    <?xml version="1.0" encoding="utf-16"?>  
    <configdatastorage xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"  
    xmlns:xsd="https://www.w3.org/2001/XMLSchema"  
    installsampledata="true"  
    waitforsampledatatoinstall="true"  
    agentdesktopzipfile=""  
    agentdesktopexename=""  
    crmmigdataimportfile="data_1033.zip">  
    <solutions>  
    <configsolutionfile solutionpackagefilename="SampleSolutionOne_1_0_managed.zip"  
    overwriteunmanagedcustomizations="false"  
    publishworkflowsandactivateplugins="true"/>  
    <configsolutionfile solutionpackagefilename="SampleSolutionTwo_1_0_managed.zip"  
    overwriteunmanagedcustomizations="false"  
    publishworkflowsandactivateplugins="true"/>  
    <configsolutionfile solutionpackagefilename="SampleSolutionThree_1_0_managed.zip" />  
    </solutions>  
    <filestoimport>  
    <configimportfile filename="SampleOption.csv"  
    filetype="CSV"  
    associatedmap="SampleOption"  
    importtoentity="sample_option"  
    datadelimiter=""  
    fielddelimiter="comma"  
    enableduplicatedetection="true"  
    isfirstrowheader="true"  
    isrecordownerateam="false"  
    owneruser=""  
    waitforimporttocomplete="false"/>  
    <configimportfile filename="File.zip"  
    filetype="ZIP"  
    associatedmap="FileMapName"  
    importtoentity="FileEntity"  
    datadelimiter=""  
    fielddelimiter="comma"  
    enableduplicatedetection="true"  
    isfirstrowheader="true"  
    isrecordownerateam="false"  
    owneruser=""  
    waitforimporttocomplete="true"/>  
    <zipimportdetails>  
    <zipimportdetail filename="subfile1.csv"  
    filetype="csv"  
    importtoentity="account" />  
    <zipimportdetail filename="subfile2.csv"  
    filetype="csv"  
    importtoentity="contact" />  
    </zipimportdetails>  
    </filestoimport>  
    <filesmapstoimport>  
    <configimportmapfile filename="SampleOption.xml" />  
    </filesmapstoimport>  
    <cmtdatafiles>  
    <cmtdatafile filename="data_1033.zip"  
    lcid="1033"  
    usermapfilename="UserMap.xml" />  
    <cmtdatafile filename="data_1041.zip"  
    lcid="1041"  
    usermapfilename="" />  
    </cmtdatafiles>  
    </configdatastorage>  
    
    

إضافة رمز مخصص

يمكنك إضافة رمز مخصص يتم تنفيذه قبل وأثناء وبعد استيراد الحزمة إلى بيئة. للقيام بذلك، اتبع هذه التعليمات.

  1. قم بتحرير ملف PackageTemplate.cs (أو PackageImportExtension.cs) في المجلد الجذر للمشروع.

  2. في ملف #C، يمكنك:

    1. إدخال تعليمات برمجية مخصصة يتم تنفيذها عند تهيئه الحزمة في تعريف أسلوب تجاوز InitializeCustomExtension.

      يمكن استخدام هذا الأسلوب للسماح للمستخدمين باستخدام معلمات وقت التشغيل أثناء تشغيل حزمة. كمطور، يمكنك إضافة أضافه دعم لأي معلمة وقت تشغيل إلى حزمتك باستخدام الخاصية RuntimeSettings طالما لديك تعليمات برمجية لمعالجتها استنادًا إلى إدخال المستخدم.

      على سبيل المثال، تقوم عينة التعليمات البرمجية التالية بتمكين معلمة وقت تشغيل مسماة SkipChecks للحزمة التي تحتوي على قيمتين محتملتين: true أو false. تتحقق عينة التعليمات البرمجية مما إذا كان المستخدم قد قام بتحديد معلمات وقت التشغيل أثناء تشغيل Package Deployer (اما باستخدام سطر الأوامر أو PowerShell) ثم يعالج التبعيات وفقًا لذلك. إذا لم يتم تحديد معلمات وقت التشغيل بواسطة المستخدم أثناء تشغيل الحزمة، فستكون قيمة الخاصية RuntimeSettings فارغة.

      public override void InitializeCustomExtension()  
      {  
      // Do nothing.  
      
      // Validate the state of the runtime settings object.  
      if (RuntimeSettings != null)  
      {  
      PackageLog.Log(string.Format("Runtime Settings populated.  Count = {0}", RuntimeSettings.Count));  
      foreach (var setting in RuntimeSettings)  
      {  
      PackageLog.Log(string.Format("Key={0} | Value={1}", setting.Key, setting.Value.ToString()));  
      }  
      
      // Check to see if skip checks is present.  
      if ( RuntimeSettings.ContainsKey("SkipChecks") )  
      {  
      bool bSkipChecks = false;  
      if (bool.TryParse((string)RuntimeSettings["SkipChecks"], out bSkipChecks))  
      OverrideDataImportSafetyChecks = bSkipChecks;  
      }  
      }  
      else  
      PackageLog.Log("Runtime Settings not populated");  
      }  
      

      يتيح هذا الرمز للمسؤول استخدام سطر الأوامر أو Import-CrmPackage cmdlet لتحديد ما إذا كان سيتم تخطي عمليات التحقق من السلامة أثناء تشغيل الأداة Package Deployer لاستيراد الحزمة. مزيد من المعلومات: نشر الحزم باستخدام Package Deployer وWindows PowerShell

    2. أدخل التعليمات البرمجية المخصصة التي سيتم تنفيذها قبل استيراد الحلول في تعريف أسلوب تجاوز PreSolutionImport لتحديد ما إذا كان سيتم الاحتفاظ بالتخصيصات أو الكتابة فوقها أثناء تحديث الحل المحدد في مثيل Dataverse الهدف، وما إذا كان سيتم تنشيط المكونات الإضافية وعمليات سير المهام بشكل تلقائي.

    3. استخدم تعريف أسلوب تجاوز RunSolutionUpgradeMigrationStep لتنفيذ عملية تحويل البيانات أو الترقية بين إصدارين من الحل. يتم استدعاء هذا الأسلوب فقط إذا كان الحل الذي تستورده موجودًا في مثيل Dataverse الهدف.

      تتوقع هذه الدالة المعلمات التالية:

      المعلمة‬ ‏‏الوصف
      solutionName اسم الحل
      oldVersion رقم إصدار الحل القديم
      newVersion رقم إصدار الحل الجديد
      oldSolutionId GUID الحل القديم.
      newSolutionId GUID الحل الجديد.
    4. أدخل تعليمات برمجية مخصصة يتم تنفيذها قبل اكتمال عملية استيراد الحل في تعريف أسلوب تجاوز BeforeImportStage. يتم استيراد عينة البيانات وبعض الملفات الثابتة للحلول في ملف ImportConfig.xml قبل اكتمال استيراد الحل.

    5. تجاوز اللغة المحددة حاليًا لاستيراد بيانات التكوين باستخدام تعريف أسلوب تجاوز OverrideConfigurationDataFileLanguage. إذا لم يتم العثور على معرف الإعدادات المحلية (LCID) المحدد للغة المحددة في قائمه اللغات المتوفرة في الحزمة، سيتم استيراد ملف البيانات الافتراضي.

      يمكنك تحديد اللغات المتوفرة لبيانات التكوين في العقدة <cmtdatafiles> في الملف ImportConfig.xml. يتم تحديد ملف استيراد بيانات التكوين الافتراضي في السمة crmmigdataimportfile في الملف ImportConfig.xml.

      بإمكان تخطي عمليات التحقق من البيانات (OverrideDataImportSafetyChecks = true) يمكن أن يكون فعالاً هنا إذا كنت متأكدًا من أن الهدف Dataverse المثيل لا يحتوي على أية بيانات.

    6. أدخل تعليمات برمجية مخصصة يتم تنفيذها بعد اكتمال عملية استيراد الحل في تعريف أسلوب تجاوز AfterPrimaryImport>. يتم الآن استيراد الملفات الثابتة المتبقية التي لم يتم استيرادها في السابق قبل بدء استيراد الحل.

    7. قم بتغيير الاسم الافتراضي لمجلد الحزمة إلى اسم الحزمة الذي تريده. للقيام بذلك، أعد تسمية مجلد PkgFolder (أو PkgAssets) في جزء مستكشف الحلول، ثم قم بتحرير قيمة الإرجاع ضمن خاصية GetImportPackageDataFolderName.

      public override string GetImportPackageDataFolderName  
      {  
      get  
      {  
      // WARNING this value directly correlates to the folder name in the Solution Explorer where the ImportConfig.xml and sub content is located.  
      // Changing this name requires that you also change the correlating name in the Solution Explorer  
      return "PkgFolder";  
      }  
      }  
      
    8. قم بتغيير اسم الحزمة عن طريق تحرير القيمة المرتجعة تحت الخاصية GetNameOfImport.

      public override string GetNameOfImport(bool plural)  
      {  
      return "Package Short Name";  
      }  
      

      هذه القيمة التي تم إرجاعها هي اسم الحزمة الخاصة بك التي تظهر في صفحة اختيار الحزمة في معالج Dynamics 365 Package Deployer .

    9. قم بتغيير وصف الحزمة عن طريق تحرير القيمة المرتجعة تحت الخاصية GetImportPackageDescriptionText.

      
      public override string GetImportPackageDescriptionText  
      {  
      get { return "Package Description"; }  
      }  
      
      

      هذه القيمة التي تم إرجاعها هي وصف الحزمة الذي يظهر بجانب اسم الحزمة في صفحة اختيار الحزمة في ملف معالج Package Deployer.

    10. قم بتغيير اسم الحزمة الطويل عن طريق تحرير القيمة المرتجعة تحت الخاصية GetLongNameOfImport.

      
      public override string GetLongNameOfImport  
      {  
      get { return "Package Long Name"; }  
      }  
      
      

      يظهر اسم الحزمة الطويل في الصفحة التالية بعد تحديد الحزمة لتثبيتها.

  3. علاوةً على ذلك، تتوفر الدالات والمتغيرات التالية للحزمة:

    الاسم كتابة ‏‏الوصف
    CreateProgressItem(String) الوظيفة تُستخدم لإنشاء عنصر تقدم جديد في واجهة المستخدم (UI).
    RaiseUpdateEvent(String, ProgressPanelItemStatus) الوظيفة تُستخدم لتحديث التقدم الذي نشأ بواسطة استدعاء CreateProgressItem(String).

    ProgressPanelItemStatus عبارة عن تعداد بالقيم التالية:

    العمل = 0
    مكتمل = 1
    فاشل = 2
    تحذير = 3
    غير معروف = 4
    RaiseFailEvent(String, Exception) الوظيفة تُستخدم لإفشال استيراد الحالة الحالية مع رسالة استثناء.
    IsRoleAssoicatedWithTeam(Guid, Guid) الوظيفة تُستخدم لتحديد ما إذا كان الدور مرتبطًا بفريق محدد.
    IsWorkflowActive(Guid) الوظيفة تُستخدم لتحديد ما إذا كان سير العمل المحدد نشطًا.
    PackageLog مؤشر الفئة مؤشر إلى واجهة التسجيل التي تمت تهيئتها للحزمة. تستخدم هذه الواجهة بواسطة حزمة لتسجيل الرسائل والاستثناءات لملف سجل الحزمة.
    RootControlDispatcher الخاصية واجهة مرسل يتم استخدامها للسماح لعنصر التحكم بعرض واجهة المستخدم الخاصة به أثناء نشر الحزمة. استخدم هذه الواجهة لتمكين التفاف عناصر أو أوامر واجهة المستخدم. من المهم التحقق من هذا المتغير بحثًا عن القيم الخالية قبل استخدامه لأنه قد لا يتم تعيينه على قيمة.
    CrmSvc الخاصية مؤشر إلى الفئة CrmServiceClient التي تتيح للحزمة أن تتعامل مع Dynamics 365 من داخل الحزمة. استخدم هذا المؤشر لتنفيذ أساليب SDK والإجراءات الأخرى في الأساليب التي تم تجاوزها.
    DataImportBypass الخاصية حدد ما إذا كان Dynamics 365 Package Deployer يتخطى كافة عمليات استيراد البيانات مثل استيراد عينة بيانات Dataverse وبيانات الملفات الثابتة والبيانات التي تم تصديرها من أداة ترحيل التكوين. حدد القيمة صواب أو خطأ. القيمة الافتراضية هي false.
    OverrideDataImportSafetyChecks الخاصية تحديد ما إذا كان Dynamics 365 Package Deployer يتجاوز بعض فحوصات السلامة الخاصة به، مما يساعد في تحسين أداء الاستيراد. حدد true أو false. القيمة الافتراضية هي false.

    يجب عليك تعيين هذه الخاصية إلى true فقط إذا لم يتضمن مثيل Dataverse الهدف أي بيانات.
  4. احفظ مشروعك. الخطوة التالية هي إنشاء الحزمة.

إنشاء ونشر

تصف الأقسام التالية كيفية إنشاء الحزمة ونشرها.

البناء

يتم وصف إنشاء الحزمة الخاصة بك أدناه اعتمادًا على الأداة التي تستخدمها.

لإنشاء حزمة تم إنشاؤها باستخدام واجهة سطر الأوامر (CLI)، يمكنك تحميل ملف .csproj إلى Visual Studio، ولكن بدلاً من ذلك سنستخدم أمر dotnet وMSBuild. يفترض المثال أدناه أن دليل العمل يحتوي على ملف csproj.*.

> dotnet publish

DeploymentPackage -> C:\Users\peter\Downloads\DeploymentPackage\bin\Debug\DeploymentPackage.1.0.0.pdpkg.zip

يمكنك اختياريًا إلقاء نظرة على تفاصيل الحزمة المنشأة.

> pac package show --package .\bin\Debug\DeploymentPackage.1.0.0.pdpkg.zip

تتكون الحزمة الخاصة بك من الملفات التالية الموجودة ضمن <Project>\Bin\Debug folder.

  • المجلد <PackageName>: اسم المجلد هو نفسه الذي قمت بتغييره لاسم مجلد الحزمة في الخطوة 2.ز من هذا القسم إضافة تعليمات برمجية مخصصة. يحتوي هذا المجلد على جميع الحلول، وبيانات التكوين، والملفات الثابتة، والمحتويات لحزمتك.

‏‫ملاحظة‬

قد تشاهد مجلد NET. (على سبيل المثال، net472) يحتوي على مجلد pdpublish. توجد ملفات DLL الخاصة بك وملفات المشاريع الأخرى في مجلد pdpublish هذا.

  • <PackageName>.dll: يحتوي التجميع على التعليمات البرمجية المخصصة لحزمتك. يكون اسم التجميع بشكل افتراضي هو نفس اسم المشروع الخاص بك.

نشر

بعد إنشاء حزمة، يمكنك نشرها على مثيل Dataverse باستخدام أداة Package Deployer أو Windows PowerShell أو أمر CLI.

  • للنشر باستخدام أداة Package Deployer، قم أولاً بتنزيل الأداة كما هو موضح أدوات تطوير Dataverse. بعد ذلك، اتبع المعلومات التفصيلية حول نشر الحزم في المقالة نشر الحزم باستخدام Package Deployer أو Windows PowerShell.

  • للنشر باستخدام CLI، استخدم أمر pac package deploy.

    > pac package deploy --package .\bin\Debug\DeploymentPackage.1.0.0.pdpkg.zip
    

    ‏‫ملاحظة‬

    لنشر حزمة في بيئة هدف باستخدام CLI، يجب عليك أولاً إعداد ملف تعريف مصادقة وتحديد مؤسسة. مزيد من المعلومات: pac auth create، pac org select

أفضل الممارسات

فيما يلي بعض النصائح حول أفضل الممارسات التي يجب اتباعها عند التعامل مع حزم Package Deployer.

إنشاء الحزم

عند إنشاء الحزم، يجب على المطورين:

  • تأكد من توقيع تجميعات الحزم.

نشر الحزم

عند نشر الحزم، يلزم على مسؤولي Dataverse:

  • الإصرار على تجميعات حزم موقّعة كي تتمكن من تتبع تجميع ما إلى مصدره.
  • اختبر الحزمة على مثيل ما قبل الإنتاج,ويفضل أن تكون صورة معكوسة لمثيل الإنتاج، قبل تشغيله على مثيل الإنتاج.
  • إجراء نسخ احتياطي لمثيل الإنتاج قبل نشر الحزمة.

راجع أيضًا

أداة إنشاء حزم الحلول