Disattivare l'approvazione per un singolo listitem
-
09-12-2019 - |
Domanda
Io sono la creazione di un elenco personalizzato in Visual Studio 2010 per SharePoint 2010.
Voglio impostare "approvazione necessaria" per un singolo listitems false o disabili.
La mia intenzione è, che un elemento può essere approvata o rifiutata solo una volta, ma non passare da "approvato" e "non approvato" a "approvato" e così via
Più dettagliate scenario:
- Ho un elenco di elementi che devono avere rivisto dopo l'aggiunta.
- Se essi ottenere approvato o rifiutato è un absolut decisione e non dovrebbe mai essere cambiato
- Se l'elemento viene approvato alcuni eventi deve essere attivata
- Se viene rifiutato un'e-mail deve essere inviata!
Le Mie Idee:
Idea - Flusso Di Lavoro:
La mia prima idea era quella di creare un flusso di lavoro che licenziato dopo un ListItem aggiunto.Il WF dovrebbe creare un'attività che potrebbero essere rivisti.Se è positivo, si deve fuoco alcune funzioni e cancella se stesso.
Idea - Progettazione Del Flusso Di Lavoro:
Idea - Codice Del Flusso Di Lavoro:
public Guid workflowId = default(System.Guid);
public SPWorkflowActivationProperties workflowProperties = new SPWorkflowActivationProperties();
// these properties are for the workflow task that will be created.
public SPWorkflowTaskProperties CreateTaskApproval_TaskProperties = new SPWorkflowTaskProperties();
public SPWorkflowTaskProperties CreateTaskApproval_AffterTaskProperties = new SPWorkflowTaskProperties();
public SPWorkflowTaskProperties CreateTaskApproval_BeforeTaskProperties = new SPWorkflowTaskProperties();
public String CreateTaskApproval_ContentTypeId = default(System.String);
public Int32 CreateTaskApproval_ListItemId = default(System.Int32);
public Guid CreateTaskApproval_TaskId = default(System.Guid);
private void createTask1_MethodInvoking(object sender, EventArgs e)
{
createTask1.TaskId = new Guid();
// Now create the approval task.
// Set up some of the properties.
CreateTaskApproval_TaskId = Guid.NewGuid();
//Setting the task properties
CreateTaskApproval_TaskProperties.Title = "TestTitle"
CreateTaskApproval_TaskProperties.Description = "Description";
CreateTaskApproval_TaskProperties.AssignedTo = @"testemail\testuser";
CreateTaskApproval_TaskProperties.SendEmailNotification = false;
CreateTaskApproval_TaskProperties.TaskType = 1;
LogComment("Request Task Created.");
}
private void onTaskChanged1_Invoked(object sender, ExternalDataEventArgs e)
{
//!!!! The Problem is here at Status
// Check to make sure the field is there on the item.
if (CreateTaskApproval_TaskProperties.ExtendedProperties["Status"] != null)
{
// Evaluate the value of the field.
if (CreateTaskApproval_TaskProperties.ExtendedProperties["Status"].ToString() == "Approved" || CreateTaskApproval_TaskProperties.ExtendedProperties["Status"].ToString() == "Declined")
{
TaskApproval_ApproveComplete = true;
}
else
{
TaskApproval_ApproveComplete = false;
}
}
}
private void completeTask1_MethodInvoking(object sender, EventArgs e)
{
workflowProperties.Item.ModerationInformation.Status = SPModerationStatusType.Approved;
//Fire some code here
}
Idea - Flusso Di Lavoro - Problemi:Non riesco a compiti di moderazione stato a tutti.("approvato" e così via)
CreateTaskApproval_TaskProperties.ExtendedProperties["Status"]
Non sanno come?
Idea 2 Personalizzato Pagina ASPX:
Un'altra idea è quella di creare una pagina aspx che elenca tutti gli elementi.In modo che l'utente possa approvare con personalizzato acctions!Che dire di questa idea?È possibile una buona alternativa?
Soluzione
Se è necessario applicare questo tipo di logica, vorrei suggerire di creare un flusso di lavoro o implementare la logica di utilizzo di un gestore di eventi (OnItemUpdating) in elementi di una lista per lista.
In entrambi i casi, si dovrebbe verificare le colonne contenenti lo stato, e controllare se è stato Approvato o Rifiutato, e poi (a seconda delle esigenze aziendali) o rifiutare eventuali cambiamenti o modifiche a tale campo.