Recalcul de référence en masse à partir d'une vue
Cette action est visible uniquement si l'on dispose du rôle [Admin]
Code post requête SQL (on load) :
if (!IsPostBack && userInfo.Roles.Contains("Admin"))
{
System.Reflection.PropertyInfo pi = this.Page.GetType().GetProperty("Menu");
DevExpress.Web.ASPxMenu menu = pi.GetValue(this.Page, null) as DevExpress.Web.ASPxMenu;
if (menu != null)
{
DevExpress.Web.MenuItem mnuActions = menu.Items.FindByName("MenuActions");
DevExpress.Web.MenuItem RebuildRef = new DevExpress.Web.MenuItem("Recalculer la référence", "User.RebuildRef");
mnuActions.Items.Add(RebuildRef);
}
}
Code étendu :
protected override void UserOnInit(EventArgs e)
{
//BTN regénérer la référence des factures
DevExpress.Web.ASPxButton BTN_RebuildRef = new DevExpress.Web.ASPxButton();
BTN_RebuildRef.ID = "ui_btn_User_RebuildRef";
BTN_RebuildRef.Text = "Recalcul de référence";
BTN_RebuildRef.CommandName = "User.RebuildRef";
BTN_RebuildRef.UseSubmitBehavior = false;
BTN_RebuildRef.Command += new CommandEventHandler(BTN_RebuildRef_Command);
this.Controls.Add(BTN_RebuildRef);
StringBuilder sb = new StringBuilder();
sb.AppendLine("function CustomAction(name){");
sb.AppendLine(" switch(name)");
sb.AppendLine(" {");
sb.AppendLine(" case \"User.RebuildRef\":");
sb.AppendLine(" " + BTN_RebuildRef.ClientID + ".DoClick();");
sb.AppendLine(" break;");
sb.AppendLine(" }");
sb.AppendLine("}");
sb.AppendLine("UserMenuItemClick = CustomAction;");
this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "UserCustomRafraichir", sb.ToString(), true);
}
void BTN_RebuildRef_Command(object sender, CommandEventArgs e)
{
List<object> lst = Grid.GetSelectedFieldValues("id");
foreach (string idDoc in lst)
{
Avanteam.Documents.DataSource.DocumentManagerWrapper dmw = new Avanteam.Documents.DataSource.DocumentManagerWrapper();
var doc = dmw.GetDocument(idDoc);
string format = dmw.SQL_ExecuteScalar("select reference from formulars where id = @id", new Avanteam.Kernel.KeyPair("id", doc.IdFormular)) as string;
// Calcul de la référence
Avanteam.Documents.Reference.BuildReference buildRef = new Avanteam.Documents.Reference.BuildReference(format);
buildRef.ApplicationName = "Process Studio";
string newRef = buildRef.Build(doc);
doc.SetValues("reference", newRef);
doc.SaveDocument();
}
Grid.DataBind();
Grid.Selection.UnselectAll();
}