لا يتم تشغيل ItemUpdated عند إضافة مستند إلى مكتبة المستندات غير الافتراضية

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/98830

سؤال

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

  • أقوم بتحميل "doc1" إلى مكتبة المستندات - ItemUpdated() لا يتم تنفيذها (لكنها تنفذ إذا كانت مكتبة المستندات "مستندات مشتركة") ؛
  • أقوم بتحميل إصدار آخر من "doc1" - ItemUpdated() ينفذ كما هو متوقع ؛
  • أقوم بإعادة تسمية "doc1" - ItemUpdated() ينفذ كما هو متوقع.

لقد كنت أعتقد أن ترتيب الأحداث عند إضافة مستند يكون عادةً:

إضافة - إضافة - تحديث - تحديث

فلماذا هو بلدي ItemUpdated() لا يتم تشغيلها لمكتبات أخرى غير "المستندات المشتركة"؟هل هناك بعض الإعدادات التي قد تسبب هذا؟

لاحظ أنه لأسباب مختلفة، لا أستطيع القيام بالمعالجة في الداخل ItemAdded().

العناصر.xml:

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Receivers ListTemplateId="101">
    <Receiver>
      <Name>MyEventReceiverItemUpdated</Name>
      <Type>ItemUpdated</Type>
      <Assembly>$SharePoint.Project.AssemblyFullName$</Assembly>
      <Class>MyProject.MyEventReceiver.MyEventReceiver</Class>
      <SequenceNumber>1000</SequenceNumber>
    </Receiver>
  </Receivers>
</Elements>

شفرة:

public class MyEventReceiver : SPItemEventReceiver
{
    // On document upload, this method is only entered if I upload to "Shared Documents"
    public override void ItemUpdated(SPItemEventProperties properties)
    {               
        base.ItemUpdated(properties); // doesn't get called either
        MyMethod(properties);
    }
}
هل كانت مفيدة؟

المحلول 2

يبدو أنني وجدت الحل.لقد نفذت ItemAdded() إلى جانب الأصل ItemUpdated() في متلقي الحدثفي الداخل، أقوم بإجراء مكالمة لاحقة لـ ItemUpdated() مثله:

public override void ItemAdded(SPItemEventProperties properties)
{            
    base.ItemAdded(properties);
    properties.ListItem.UpdateOverwriteVersion();            
}

لاحظ أن UpdateOverwriteVersion "يقوم بتحديث العنصر دون إنشاء إصدار آخر من العنصر" (MSDN).وينتج عن هذا استدعاء ل ItemUpdated() عند إضافة عنصر جديد؛بالإضافة إلى ذلك، فإنه لا يقوم بإنشاء إصدار جديد من العنصر (أي.لن ينتهي بك الأمر بنسختين عند إضافة عنصر جديد لأول مرة).حتى الآن، يعمل هذا كما هو متوقع لجميع مكتبات المستندات، مع الإصدار وبدونه.

نصائح أخرى

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

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

لذلك قد ترغب في تجربة تكوينات مختلفة للمكتبة في بيئتك حتى تتمكن من فهم كيفية تأثير "ميزة" SharePoint هذه على نظامك بشكل أفضل.

كما يمكنني أن أقدر أنه قد تكون هناك أسباب لتجنب ItemAdded.إذا ظل ItemUpdated يمثل مشكلة بالنسبة لك، وكنت على استعداد لمشاركة بعض التفاصيل حول سبب كون ItemAdded غير مرغوب فيه في بيئتك، ففكر في طرح سؤال منفصل هنا حول كيفية جعل ItemAdded يعمل في نظامك.

حظ سعيد!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى sharepoint.stackexchange
scroll top