Почему я не могу вызвать открытый метод в моей веб-части (элемент управления пользователя) из приемника событий?

Я добавил этот приемник событий (основываясь на том, что нашел здесь):

using System;
using System.Security.Permissions;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Security;
using Microsoft.SharePoint.Utilities;
using Microsoft.SharePoint.Workflow;

namespace PostTravelWizard.PostTravelItemEventReceiver
{
    /// <summary>
    /// List Item Events
    /// </summary>
    public class PostTravelItemEventReceiver : SPItemEventReceiver
    {
       /// <summary>
       /// An item was added.
       /// </summary>
       public override void ItemAdded(SPItemEventProperties properties)
       {
           base.ItemAdded(properties);
           //GeneratePDF(); <= "The name 'GeneratePDF' does not exist in the current context
       }

       /// <summary>
       /// The list received a context event.
       /// </summary>
       public override void ContextEvent(SPItemEventProperties properties)
       {
           base.ContextEvent(properties);
           // TODO: What "context event" occurs here? To what event should I respond?
       }

    }
}

Я надеюсь, что когда список обновляется (со стороны клиента /Javascript), затем извлекает эти значения из кода для создания PDF-файла. У меня есть этот код в моем файле *.ascx.cs:

public partial class PostTravelWizardWebPartUserControl : UserControl
{
    . . .

    public void GeneratePDF(PostTravelData ptd)
    {
        ;//bla
    }

... но он не позволяет мне позвонить GeneratePDF() из приемника событий - это не с

Имя 'GeneratePDF' не существует в текущем контексте

Зачем? Как я могу исправить это asunto?

1 ответ

Решение

GeneratePDF это метод экземпляра PostTravelWizardWebPartUserControl учебный класс. Чтобы позвонить с PostTravelItemEventReceiver Вы должны создать экземпляр PostTravelWizardWebPartUserControl или пусть метод (GeneratePDF) быть static,

Случай 1

public override void ItemAdded(SPItemEventProperties properties)
{
    base.ItemAdded(properties);
    new PostTravelWizardWebPartUserControl().GeneratePDF();
}

Дело 2

public partial class PostTravelWizardWebPartUserControl : UserControl
{
    public static void GeneratePDF(PostTravelData ptd)
    {
        ;//bla
    }
}


public class PostTravelItemEventReceiver : SPItemEventReceiver
{
    base.ItemAdded(properties);
    PostTravelWizardWebPartUserControl.GeneratePDF();
}
Другие вопросы по тегам