Navigate to a Subassembly by Assembly Sequence

Here’s some customization code for job entry. You will need the BAQ in the system to make it work.

JobAssy-1.baq (11.6 KB)

// **************************************************
// Custom code for JobEntryForm
// Created: 7/26/2018 12:18:09 PM
// **************************************************
 
extern alias Erp_Contracts_BO_Project;
extern alias Erp_Contracts_BO_Part;
 
using System;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Windows.Forms;
using Erp.Adapters;
using Erp.UI;
using Ice.Lib;
using Ice.Adapters;
using Ice.Lib.Customization;
using Ice.Lib.ExtendedProps;
using Ice.Lib.Framework;
using Ice.Lib.Searches;
using Ice.UI.FormFunctions;
using System.Reflection;
public class Script
{
    // ** Wizard Insert Location - Do Not Remove 'Begin/End Wizard Added Module Level Variables' Comments! **
    // Begin Wizard Added Module Level Variables **
 
    // End Wizard Added Module Level Variables **
 
    // Add Custom Module Level Variables Here **
 
    //Create a Custom Menu Item to hang on the Tree Context
    MenuItem findAssy =null;
 
    //This BAQ Data View will carry the Assembly Sequences and GUIDs (Sys Row IDs)
    BAQDataView bdvjobAssy;
    public void InitializeCustomCode()
    {
        // ** Wizard Insert Location - Do not delete 'Begin/End Wizard Added Variable Initialization' lines **
        // Begin Wizard Added Variable Initialization
 
        // End Wizard Added Variable Initialization
 
        // Begin Wizard Added Custom Method Calls
 
        // End Wizard Added Custom Method Calls
 
        //Instanciate the Custom Menu Item
        findAssy =  new MenuItem("Go To Assy Num", new EventHandler(cmFindAssy));
         
        //Create an Event on the Tree to Insert Our Cutom menu
         
        oTrans.JobTree.BeforeShowContextMenu += new Ice.Lib.Framework.JobLib.MethodTree.BeforeShowContextMenuHandler(jobTree_BeforeShowContextMenu1);
 
        //instanciate our BAQDataView and subscribe it
        CreateBAQView();
    }
 
    public void DestroyCustomCode()
    {
        // ** Wizard Insert Location - Do not delete 'Begin/End Wizard Added Object Disposal' lines **
        // Begin Wizard Added Object Disposal
 
        // End Wizard Added Object Disposal
 
        // Begin Custom Code Disposal
 
        // End Custom Code Disposal
        oTrans.JobTree.BeforeShowContextMenu -= new Ice.Lib.Framework.JobLib.MethodTree.BeforeShowContextMenuHandler(jobTree_BeforeShowContextMenu1);
    }
 
    //When our Custom menu Is Clicked...
    private void cmFindAssy(object sender, System.EventArgs e)
    {
        //Call a little Pop up Form
        frmAssyNum frm = new frmAssyNum();
        int newAssy=0;
 
 
        if(frm.ShowDialog()==DialogResult.OK)
        {
 
            int.TryParse(frm.txtAssyNum.Text, out newAssy);
 
            //Refresh Our BAQ Data View
            RefreshBAQDataView(bdvjobAssy);
            var edvAssy = oTrans.Factory("CurrAsm");
 
            //Loop through all the Job Assemblies until the right one is found
            foreach(DataRowView x in bdvjobAssy.dataView)
            {
                //When Found, Set to current assembly
                if((int)x["JobAsmbl_AssemblySeq"] == newAssy)
                {
                    oTrans.GetDatasetForTree(oTrans.JobNum, (int)edvAssy.dataView[edvAssy.Row]["AssemblySeq"], newAssy,false);
                    oTrans.JobTree.SetAssemblyNode(((Guid)x["JobAsmbl_SysRowID"]).ToString());
                    break;
                }
            }
        }
    }
    private void jobTree_BeforeShowContextMenu1(object sender, Ice.Lib.Framework.JobLib.MethodTree.NodeArgs e)
    {
        oTrans.JobTree.TreeContextMenu.MenuItems.Add(findAssy);
    }
     
    private void CreateBAQView() {
        // create the baq view and add it to the transaction
        bdvjobAssy = new BAQDataView("JobAssy");
        oTrans.Add("JobAssyB", bdvjobAssy);
  
        // publish columns we'll bind to
        var jobBinding = "JobHead.JobNum";
         
  
        oTrans.PublishColumnChange(jobBinding, Guid.NewGuid().ToString());
         
        var jobPub = oTrans.GetPublisher(jobBinding);
         
  
         
        bdvjobAssy.SubscribeToPublisher(jobPub.PublishName, "JobAsmbl_JobNum");
      
    }
 
     private void RefreshBAQDataView(BAQDataView iBaqView)
    {
        MethodInfo mi = iBaqView.GetType().GetMethod("invokeExecute", BindingFlags.Instance | BindingFlags.NonPublic);
        mi.Invoke(iBaqView, new object[]{ true });
    }
}
 
 
//This is a simple pop up form that shows the Select Assembly  Box
 
public class frmAssyNum : EpiBaseForm
{
    /// <summary>
    /// Required designer variable.
    /// </summary>
    private System.ComponentModel.IContainer components = null;
 
    /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.
    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing);
    }
 
    #region Windows Form Designer generated code
 
    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {
        this.txtAssyNum = new System.Windows.Forms.TextBox();
        this.label1 = new System.Windows.Forms.Label();
        this.btnOK = new System.Windows.Forms.Button();
        this.btnCancel = new System.Windows.Forms.Button();
        this.SuspendLayout();
        // 
        // txtAssyNum
        // 
        this.txtAssyNum.Location = new System.Drawing.Point(72, 16);
        this.txtAssyNum.Name = "txtAssyNum";
        this.txtAssyNum.Size = new System.Drawing.Size(150, 20);
        this.txtAssyNum.TabIndex = 0;
        // 
        // label1
        // 
        this.label1.AutoSize = true;
        this.label1.Location = new System.Drawing.Point(12, 19);
        this.label1.Name = "label1";
        this.label1.Size = new System.Drawing.Size(54, 13);
        this.label1.TabIndex = 1;
        this.label1.Text = "Assy Num";
        // 
        // btnOK
        // 
        this.btnOK.Location = new System.Drawing.Point(15, 51);
        this.btnOK.Name = "btnOK";
        this.btnOK.Size = new System.Drawing.Size(75, 23);
        this.btnOK.TabIndex = 2;
        this.btnOK.Text = "OK";
        this.btnOK.UseVisualStyleBackColor = true;
        this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
        // 
        // btnCancel
        // 
        this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
        this.btnCancel.Location = new System.Drawing.Point(147, 51);
        this.btnCancel.Name = "btnCancel";
        this.btnCancel.Size = new System.Drawing.Size(75, 23);
        this.btnCancel.TabIndex = 3;
        this.btnCancel.Text = "Cancel";
        this.btnCancel.UseVisualStyleBackColor = true;
        this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
        // 
        // frmAssyNum
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.CancelButton = this.btnCancel;
        this.ClientSize = new System.Drawing.Size(234, 86);
        this.ControlBox = false;
        this.Controls.Add(this.btnCancel);
        this.Controls.Add(this.btnOK);
        this.Controls.Add(this.label1);
        this.Controls.Add(this.txtAssyNum);
        this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
        this.Name = "frmAssyNum";
        this.Text = "Enter Assembly Number";
        this.ResumeLayout(false);
        this.PerformLayout();
 
    }
 
    #endregion
 
    public System.Windows.Forms.TextBox txtAssyNum;
    private System.Windows.Forms.Label label1;
    private System.Windows.Forms.Button btnOK;
    private System.Windows.Forms.Button btnCancel;
 
    public frmAssyNum()
    {
        InitializeComponent();
    }
 
    private void btnOK_Click(object sender, EventArgs e)
    {
        this.DialogResult = DialogResult.OK;
    }
 
    private void btnCancel_Click(object sender, EventArgs e)
    {
        this.DialogResult = DialogResult.Cancel;
    }
}
5 Likes