- TECH_ARCHITECTURE.md: technical blueprint for the new platform - AI_LAYER_DESIGN_NOTES.md: AI agent, event/action, SQL and audit design - Axpert 11.2 web runtime source, structure exports and release notes (reference) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
8188 lines
357 KiB
C#
8188 lines
357 KiB
C#
#region NameSpaces
|
||
|
||
using Newtonsoft.Json;
|
||
using Newtonsoft.Json.Linq;
|
||
using System;
|
||
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using System.Data;
|
||
using System.IO;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Text.RegularExpressions;
|
||
using System.Web;
|
||
using System.Xml;
|
||
#endregion
|
||
|
||
#region TstructData Class
|
||
/// <summary>
|
||
/// TstructData class stores all the field related data like, field Name,value,oldvalue,componentname
|
||
/// rowno,frameno. Using this fieldvaluexml is constructed and stored in a string.
|
||
/// </summary>
|
||
[Serializable()]
|
||
public class TStructData
|
||
{
|
||
#region Attributes
|
||
/// <summary>
|
||
/// Declaration of all attributes related to Tstruct Data Class
|
||
/// </summary>
|
||
public ArrayList fieldIndexArray = new ArrayList();
|
||
public ArrayList fieldName = new ArrayList();
|
||
public ArrayList fieldFrameNo = new ArrayList();
|
||
public ArrayList fieldControlName = new ArrayList();
|
||
public ArrayList fieldRowNo = new ArrayList();
|
||
public ArrayList fieldValue = new ArrayList();
|
||
public ArrayList fieldOldValue = new ArrayList();
|
||
public ArrayList fieldIdValue = new ArrayList();
|
||
public ArrayList fieldOldIdValue = new ArrayList();
|
||
public ArrayList dcRowCntVals = new ArrayList();
|
||
public ArrayList fieldRowValues = new ArrayList();
|
||
public ArrayList fldIdCol = new ArrayList();
|
||
public ArrayList fldMasterRow = new ArrayList();
|
||
public ArrayList fieldDPMVals = new ArrayList();
|
||
public ArrayList fieldDPVals = new ArrayList();
|
||
public ArrayList ChangedDcs = new ArrayList();
|
||
public ArrayList DelRowFldsXml = new ArrayList();
|
||
public ArrayList newRowNos = new ArrayList();
|
||
public ArrayList oldRowNos = new ArrayList();
|
||
// TODO: Get the attachment files from the client and update the attachment array in the object.
|
||
public ArrayList attachArray = new ArrayList();
|
||
public String fieldValueXml = string.Empty;
|
||
private StringBuilder dsDataXML = new StringBuilder();
|
||
public String fgFieldValueXml = string.Empty;
|
||
public String popFGFieldValueXml = string.Empty;
|
||
public String transactionID = string.Empty;
|
||
public String recordID = string.Empty;
|
||
private string jsonString = string.Empty;
|
||
private string defaultDateStr = "dd/mm/yyyy";
|
||
public ArrayList imageFldNames = new ArrayList();
|
||
public ArrayList imageFldSrc = new ArrayList();
|
||
ArrayList depFormatDcs = new ArrayList();
|
||
public StringBuilder tabJson = new StringBuilder();
|
||
public ArrayList AxMasterRowFlds = new ArrayList();
|
||
public StringBuilder AxDepArrays = new StringBuilder();
|
||
public string project = string.Empty;
|
||
public string user = string.Empty;
|
||
public string AxRole = string.Empty;
|
||
public string sessionid = string.Empty;
|
||
public string errlog = string.Empty;
|
||
public string filename = string.Empty;
|
||
public DataSet dsData;
|
||
public string ires = string.Empty;
|
||
public string serviceInputXml = string.Empty;
|
||
public string result = string.Empty;
|
||
public string axpert = "Axpert\\";
|
||
public string transID = "";
|
||
public string rid = string.Empty;
|
||
private int deletedCount = -1;
|
||
public bool IsDraftObj = false;
|
||
public string AxActDepField = "";
|
||
public string TabDcStatus = string.Empty;
|
||
ArrayList AxSubGridRows = new ArrayList();
|
||
ArrayList AxDelDcNo = new ArrayList();
|
||
ArrayList AxDelRecIds = new ArrayList();
|
||
ArrayList subWsRows = new ArrayList();
|
||
ArrayList subDsRows = new ArrayList();
|
||
public string AxActiveDc = string.Empty;
|
||
public ArrayList removeFiles = new ArrayList();
|
||
//Variables to store the memVars details
|
||
ArrayList memVarNames = new ArrayList();
|
||
ArrayList memVarValues = new ArrayList();
|
||
ArrayList memVarTypes = new ArrayList();
|
||
public string memVarsData = string.Empty;
|
||
bool hasMemVars = false;
|
||
public string strServerTime = string.Empty;
|
||
public double webTime1;
|
||
public double webTime2;
|
||
public double asbTime;
|
||
//public DateTime asbTime2;
|
||
public bool logTimeTaken = false;
|
||
public bool hasImagePath = false;
|
||
string scriptsPath = HttpContext.Current.Application["ScriptsPath"].ToString();
|
||
|
||
public string attachDirPath = "";
|
||
public string imgAttachPath = "";
|
||
|
||
public string AxActiveAction = string.Empty;
|
||
List<string> deletedRowCount = new List<string>();
|
||
bool isDeletedRow = false;
|
||
public ArrayList AxGridAttNotExistList = new ArrayList();
|
||
|
||
[NonSerialized]
|
||
public ASBExt.WebServiceExt objWebServiceExt = new ASBExt.WebServiceExt();
|
||
|
||
LogFile.Log logobj = new LogFile.Log();
|
||
Util.Util util = new Util.Util();
|
||
CacheMgr.CacheManager cm = new CacheMgr.CacheManager("");
|
||
Boolean isDebugFileCreated = false;
|
||
public TStructDef tstStrObj;
|
||
public bool attachDir = false;
|
||
public Dictionary<string, string> fastDDL = new Dictionary<string, string>();
|
||
|
||
int DeleteRowTopNo = 0;
|
||
#endregion
|
||
|
||
#region Attributes with get,set properties.
|
||
/// <summary>
|
||
/// Attributes with get, set properties.
|
||
/// </summary>
|
||
public ArrayList fldNames
|
||
{
|
||
get { return fieldName; }
|
||
set { fieldName = value; }
|
||
}
|
||
|
||
public ArrayList fldFrameNos
|
||
{
|
||
get { return fieldFrameNo; }
|
||
set { fieldFrameNo = value; }
|
||
}
|
||
|
||
public ArrayList fldControlNames
|
||
{
|
||
get { return fieldControlName; }
|
||
set { fieldControlName = value; }
|
||
}
|
||
|
||
public ArrayList fldRowNos
|
||
{
|
||
get { return fieldRowNo; }
|
||
set { fieldRowNo = value; }
|
||
}
|
||
|
||
public ArrayList fldValues
|
||
{
|
||
get { return fieldValue; }
|
||
set { fieldValue = value; }
|
||
}
|
||
|
||
public ArrayList fldOldValues
|
||
{
|
||
get { return fieldOldValue; }
|
||
set { fieldOldValue = value; }
|
||
}
|
||
|
||
public ArrayList fldIdValues
|
||
{
|
||
get { return fieldIdValue; }
|
||
set { fieldIdValue = value; }
|
||
}
|
||
|
||
public ArrayList fldOldIdValues
|
||
{
|
||
get { return fieldOldIdValue; }
|
||
set { fieldOldIdValue = value; }
|
||
}
|
||
|
||
public ArrayList attachments
|
||
{
|
||
get { return attachArray; }
|
||
set { attachArray = value; }
|
||
}
|
||
|
||
public String fldValueXml
|
||
{
|
||
get { return fieldValueXml; }
|
||
set { fieldValueXml = value; }
|
||
}
|
||
|
||
public String fgFldValueXml
|
||
{
|
||
get { return fgFieldValueXml; }
|
||
set { fgFieldValueXml = value; }
|
||
}
|
||
|
||
public String transid
|
||
{
|
||
get { return transactionID; }
|
||
set { transactionID = value; }
|
||
}
|
||
|
||
public String recordid
|
||
{
|
||
get { return recordID; }
|
||
set { recordID = value; }
|
||
}
|
||
|
||
public string newJson
|
||
{
|
||
get { return jsonString; }
|
||
set { jsonString = value; }
|
||
}
|
||
public DataSet dsDataSet
|
||
{
|
||
get { return dsData; }
|
||
set { dsData = value; }
|
||
}
|
||
|
||
public bool isSaveCalled = false;
|
||
public bool isAxpImagePath = false;
|
||
#endregion
|
||
|
||
#region Constructor which parses the jsonData.
|
||
/// <summary>
|
||
/// Constructor which gets the JsonData from the service and updates all the field related information
|
||
/// to the array list by parsing through json data.
|
||
/// </summary>
|
||
/// <param name="jsonData"></param>
|
||
public TStructData(string jsonData, string transId, string recId, TStructDef strObj)
|
||
{
|
||
if (HttpContext.Current.Session["AxLogging"] != null)
|
||
{
|
||
if (Convert.ToString(HttpContext.Current.Session["AxLogging"]).ToLower() == "true")
|
||
logTimeTaken = true;
|
||
}
|
||
|
||
tstStrObj = strObj;
|
||
CreateDataSets(strObj);
|
||
|
||
this.rid = recId;
|
||
transID = transId;
|
||
|
||
if (HttpContext.Current.Session["AxAttachFilePath"] != null)
|
||
attachDirPath = HttpContext.Current.Session["AxAttachFilePath"].ToString();
|
||
|
||
if (HttpContext.Current.Session["AxpAttachmentPathGbl"] != null)
|
||
attachDirPath = HttpContext.Current.Session["AxpAttachmentPathGbl"].ToString();
|
||
|
||
if (attachDirPath != string.Empty)
|
||
attachDir = true;
|
||
|
||
|
||
if (HttpContext.Current.Session["AxImagePath"] != null && HttpContext.Current.Session["AxImagePath"].ToString() != "")
|
||
{
|
||
imgAttachPath = HttpContext.Current.Session["AxImagePath"].ToString();
|
||
//CommonDir directory creation taken back due to application server memory usage.
|
||
//if (!imgAttachPath.Contains(":\\") && !imgAttachPath.StartsWith("\\"))
|
||
//{
|
||
// CreateDirectoryInCommonDir(ref imgAttachPath);
|
||
//}
|
||
}
|
||
if (HttpContext.Current.Session["AxpImagePathGbl"] != null && HttpContext.Current.Session["AxpImagePathGbl"].ToString() != "")
|
||
{
|
||
imgAttachPath = HttpContext.Current.Session["AxpImagePathGbl"].ToString();
|
||
imgAttachPath = imgAttachPath.Replace(";bkslh", "\\");
|
||
}
|
||
if (HttpContext.Current.Session["AxpSaveImageDb"] != null && HttpContext.Current.Session["AxpSaveImageDb"].ToString() == "true")
|
||
imgAttachPath = "";
|
||
|
||
ArrayList imageFlds = new ArrayList();
|
||
ArrayList imageSrc = new ArrayList();
|
||
GetGlobalVars();
|
||
|
||
|
||
jsonData = jsonData.Replace("*$*", "♦");
|
||
jsonData = jsonData.Replace("\\", ";bkslh");
|
||
string[] resval = jsonData.Split('♦');
|
||
StringBuilder dataJson = new StringBuilder();
|
||
|
||
for (int j = 0; j < resval.Length; j++)
|
||
{
|
||
//TODO: all other json nodes should be handled in the json parsing
|
||
JArray Data = null;
|
||
try
|
||
{
|
||
if (resval[j] != "")
|
||
{
|
||
JObject tstData = JObject.Parse(resval[j]);
|
||
Data = (JArray)tstData["data"];
|
||
jsonString = @"{""data"":[";
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
logobj.CreateLog("JsonToArray function - " + ex.Message, sessionid, "Exception-" + transid, "new");
|
||
logobj.CreateLog("JsonData - " + jsonData, sessionid, "Exception-" + transid, "");
|
||
|
||
//throw ex;
|
||
}
|
||
|
||
|
||
if (Data != null)
|
||
{
|
||
string fName = string.Empty;
|
||
string fValue = string.Empty;
|
||
string delRows = string.Empty;
|
||
string rowNo = string.Empty;
|
||
string fDatatype = string.Empty;
|
||
string name = string.Empty;
|
||
string fldName = string.Empty;
|
||
string fldFrameNo = string.Empty;
|
||
string frmNum = string.Empty;
|
||
string frowValues = string.Empty;
|
||
string fldIdValues = string.Empty;
|
||
string idCol = string.Empty;
|
||
string masterRow = string.Empty;
|
||
string comboVal = string.Empty;
|
||
string comboIdCol = string.Empty;
|
||
string dcNo = "0";
|
||
string dpmValue = string.Empty;
|
||
string dpValue = string.Empty;
|
||
string idVal = string.Empty;
|
||
string oldIdVal = string.Empty;
|
||
StringBuilder ddlVals = new StringBuilder();
|
||
StringBuilder ddlDpVals = new StringBuilder();
|
||
//TODO: Create a single function for parsing the json result- The same code is used in JsonToArray
|
||
for (int m = 0; m < Data.Count; m++)
|
||
{
|
||
Dictionary<string, string> values = JsonConvert.DeserializeObject<Dictionary<string, string>>(Data[m].ToString());
|
||
|
||
fDatatype = "";
|
||
delRows = "";
|
||
masterRow = string.Empty;
|
||
dpmValue = string.Empty;
|
||
dpValue = string.Empty;
|
||
string dcHasRows = string.Empty;
|
||
|
||
if (values.ContainsKey("t"))
|
||
fDatatype = values["t"];
|
||
if (values.ContainsKey("n"))
|
||
fName = values["n"];
|
||
if (values.ContainsKey("v"))
|
||
fValue = values["v"];
|
||
if (values.ContainsKey("cr"))
|
||
delRows = values["cr"];
|
||
if (values.ContainsKey("mr"))
|
||
masterRow = values["mr"];
|
||
if (values.ContainsKey("idcol"))
|
||
idCol = values["idcol"];
|
||
if (values.ContainsKey("id"))
|
||
idVal = values["id"];
|
||
if (values.ContainsKey("oldid"))
|
||
oldIdVal = values["oldid"];
|
||
if (values.ContainsKey("dpm"))
|
||
dpmValue = values["dpm"];
|
||
if (values.ContainsKey("dp"))
|
||
dpValue = values["dp"];
|
||
if (values.ContainsKey("r"))
|
||
{
|
||
rowNo = values["r"];
|
||
if (rowNo.Length == 1)
|
||
rowNo = "00" + rowNo;
|
||
else if (rowNo.Length == 2)
|
||
rowNo = "0" + rowNo;
|
||
}
|
||
|
||
|
||
|
||
string rowValues = string.Empty;
|
||
|
||
if (fName != string.Empty)
|
||
{
|
||
fValue = fValue.Replace("^^dq", "\"");
|
||
fValue = fValue.Replace(";bkslh", "\\");
|
||
|
||
if (fName.ToLower() == Constants.AXPATTACHMENTPATH && fValue.Trim() != String.Empty)
|
||
{
|
||
attachDirPath = fValue;
|
||
attachDir = true;
|
||
}
|
||
|
||
////TODO: The same code is there in the UpdateDataList, and Jsontoarray
|
||
//if (fName.ToLower() == "axpcurrencydec")
|
||
// CheckAxpCurrDec(fName, fValue);
|
||
|
||
string rowVal = "";
|
||
if (fDatatype == "i")
|
||
{
|
||
//On loading the data, if there is a image field whose image is stored in folders,
|
||
//Add it to the array to call the MoveImage function to move it to the scripts folder.
|
||
string fldId = string.Empty;
|
||
fldId = fName + rowNo + "F" + dcNo;
|
||
if (fName.StartsWith(Constants.IMGPrefix))
|
||
{
|
||
imageFlds.Add(fldId);
|
||
fValue = string.Empty;
|
||
}
|
||
else if (fName.StartsWith(Constants.IMGSRCPrefix))
|
||
{
|
||
imageSrc.Add(fValue);
|
||
}
|
||
}
|
||
else if (fDatatype == "c")
|
||
{
|
||
comboVal = fValue;
|
||
}
|
||
else if (fDatatype == "dv")
|
||
{
|
||
rowVal = fValue;
|
||
if (rowValues == "")
|
||
rowValues = rowVal;
|
||
else
|
||
rowValues += "" + rowVal;
|
||
|
||
string[] temp = rowVal.Split('?');
|
||
if (temp.Length <= 3 && comboVal == string.Empty && temp.Length > 1)
|
||
{
|
||
StringBuilder strVal = new StringBuilder();
|
||
for (int i = 0; i < temp.Length; i++)
|
||
{
|
||
if (temp[i].ToString() != string.Empty)
|
||
strVal.Append(temp[i].ToString());
|
||
}
|
||
if (strVal.ToString().ToLower() == "yesno" || strVal.ToString().ToLower() == "noyes")
|
||
{
|
||
//To set the default value of checkbox in the grid dc to "no".
|
||
fValue = "no";
|
||
}
|
||
}
|
||
}
|
||
else if (fDatatype == "dc")
|
||
{
|
||
string dcRowCount = fName + "~" + fValue;
|
||
dcNo = fName.Substring(2);
|
||
|
||
if (values.ContainsKey("hasdatarows"))
|
||
dcHasRows = values["hasdatarows"];
|
||
|
||
bool isGrid = IsDcGrid(dcNo, strObj);
|
||
|
||
if (isGrid)
|
||
{
|
||
if (dcHasRows != "")
|
||
{
|
||
TStructDef.DcStruct dc = (TStructDef.DcStruct)strObj.dcs[Convert.ToInt32(dcNo) - 1];
|
||
if (dcHasRows == "yes")
|
||
dc.DCHasDataRows = true;
|
||
else
|
||
dc.DCHasDataRows = false;
|
||
strObj.dcs[Convert.ToInt32(dcNo) - 1] = dc;
|
||
}
|
||
|
||
//This condition is added to maintain the field array for all the dc fields.
|
||
//In case of index calculation if some dc's fields are not there then it throws error.
|
||
if (fValue == "0" && delRows == "")
|
||
{
|
||
fValue = "1";
|
||
delRows = "i1";
|
||
dcRowCount = fName + "~" + fValue;
|
||
}
|
||
}
|
||
UpdateRowCount(fName, dcRowCount);
|
||
}
|
||
|
||
|
||
if (idCol == "no" || idCol == "")
|
||
idCol = "0";
|
||
else
|
||
idCol = "1";
|
||
|
||
if (fDatatype == "c")
|
||
comboIdCol = idCol;
|
||
|
||
if (fDatatype == "dv")
|
||
{
|
||
ddlVals.Append(rowValues);
|
||
ddlVals.Append("♣");
|
||
ddlDpVals.Append(dpValue);
|
||
ddlDpVals.Append("♣");
|
||
DSUpdateRowValues(fName, Convert.ToInt32(rowNo), ddlVals.ToString(), ddlDpVals.ToString(), masterRow, comboIdCol);
|
||
}
|
||
else
|
||
{
|
||
ddlVals = new StringBuilder();
|
||
if (fDatatype != "dc")
|
||
{
|
||
string rowFrmNo = string.Empty;
|
||
if (rowNo != "")
|
||
{
|
||
name = fName + rowNo + "F" + dcNo;
|
||
rowFrmNo = rowFrmNo + "F" + dcNo;
|
||
DSSubmitWithOld(fName, Convert.ToInt32(rowNo), fValue, idVal, oldIdVal);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
CreateFieldValueXml("ALL", "", "LoadData");
|
||
}
|
||
}
|
||
//Loop through the image fields and load the images in the scripts folder
|
||
for (int i = 0; i < strObj.AxImageFields.Count; i++)
|
||
{
|
||
if (imageSrc.Count != 0 && imageSrc.Count >= i)
|
||
{
|
||
if (imageSrc[i].ToString() != "")
|
||
{
|
||
string[] fvalues = imageSrc[i].ToString().Split('~');
|
||
string recordId = fvalues[2].ToString();
|
||
|
||
LoadImageToFolder(strObj.AxImageFields[i].ToString(), recordId);
|
||
}
|
||
}
|
||
else if (recId != "0" && recId != "")
|
||
{
|
||
LoadImageToFolder(strObj.AxImageFields[i].ToString(), recId);
|
||
}
|
||
}
|
||
|
||
//Load the grid attachments in the folder
|
||
if ((recId != "0" && recId != "" && tstStrObj.ContainsGridAttach) || (recId == "0" && tstStrObj.ContainsGridRefer))
|
||
{
|
||
GetGlobalAttachPath();
|
||
LoadGridAttsToFolder(recId, transID);
|
||
}
|
||
|
||
//Call the function which parses thge memvar node and updates the arrays.
|
||
ParseMemVarNode(jsonData, "LoadData");
|
||
}
|
||
|
||
|
||
#endregion
|
||
|
||
#region Methods
|
||
|
||
#region Public Methods
|
||
/// <summary>
|
||
/// This method is invoked by end user to update the list with new fieldnames and fieldvalues.
|
||
/// This method inturn calls other methods for updating the list and construct the new field value xml.
|
||
/// Here there is a assumption that fldArray and fldValueArray are consistent, means both has same number
|
||
/// of rows and maintain the index.
|
||
/// </summary>
|
||
/// <param name="fldArray">
|
||
/// fldArray consists the updated/new component names.
|
||
/// </param>
|
||
/// <param name="fldValueArray">
|
||
/// fldValueArray consists the updated/new component values.
|
||
/// </param>
|
||
/// <param name="deletedArray">
|
||
/// deletedArray is specific to grid fields , it consists the row no. which is deleted and frame no.
|
||
/// the particular dc no. from where the row is deleted.
|
||
/// </param>
|
||
public void GetFieldValueXml(ArrayList fldArray, ArrayList fldDbRowNo, ArrayList fldValueArray, ArrayList deletedArray, string frameNo, string calledFrom, string condition, string includeDcs)
|
||
{
|
||
//first update the list with the new fldArray.
|
||
UpdateDataList(fldArray, fldDbRowNo, fldValueArray, deletedArray);
|
||
DeleteDefaultRowInPopDc(project, user, transid, sessionid, AxRole);
|
||
if (deletedRowCount.Count > 0)
|
||
{
|
||
deleteRowOnSave();
|
||
}
|
||
//Create the xml from the updated list.
|
||
CreateFieldValueXml(condition, includeDcs, calledFrom);
|
||
}
|
||
|
||
public void GetPerfFieldValueXml(ArrayList fldArray, ArrayList fldDbRowNo, ArrayList fldValueArray, ArrayList deletedArray, string frameNo, string calledFrom, string condition, string includeDcs)
|
||
{
|
||
//first update the list with the new fldArray.
|
||
UpdateDataList(fldArray, fldDbRowNo, fldValueArray, deletedArray);
|
||
DeleteDefaultRowInPopDc(project, user, transid, sessionid, AxRole);
|
||
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// This method is invoked by end user to update the list with new fieldnames and fieldvalues.
|
||
/// This method inturn calls other methods for updating the list and construct the new field value xml.
|
||
/// Here there is a assumption that fldArray and fldValueArray are consistent, means both has same number
|
||
/// of rows and maintain the index.
|
||
/// </summary>
|
||
/// <param name="fldArray">
|
||
/// fldArray consists the updated/new component names.
|
||
/// </param>
|
||
/// <param name="fldValueArray">
|
||
/// fldValueArray consists the updated/new component values.
|
||
/// </param>
|
||
/// <param name="deletedArray">
|
||
/// deletedArray is specific to grid fields , it consists the row no. which is deleted and frame no.
|
||
/// the particular dc no. from where the row is deleted.
|
||
/// </param>
|
||
public void GetPopFieldValueXml(ArrayList fldArray, ArrayList fldDbRowNo, ArrayList fldValueArray, ArrayList deletedArray, string frameNo, string parDcNo, int parRowNo, string popDcNo, int popRowNo)
|
||
{
|
||
//first update the list with the new fldArray.
|
||
UpdateDataList(fldArray, fldDbRowNo, fldValueArray, deletedArray);
|
||
DeleteDefaultRowInPopDc(project, user, transid, sessionid, AxRole);
|
||
|
||
// Create the xml from the updated list.
|
||
CreateFieldValueXml("-1", parDcNo, parRowNo, popDcNo, popRowNo);
|
||
}
|
||
|
||
|
||
public void UpdateAttachments(string attachFiles)
|
||
{
|
||
string[] attach = attachFiles.Split(',');
|
||
|
||
for (int j = 0; j < attach.Length; j++)
|
||
attachArray.Add(attach[j].ToString());
|
||
}
|
||
|
||
private string GetDelRowDataIndex(string axpRecId)
|
||
{
|
||
string delXml = string.Empty;
|
||
for (int j = 0; j < DelRowFldsXml.Count; j++)
|
||
{
|
||
string[] strDelData = DelRowFldsXml[j].ToString().Split('♦');
|
||
if (strDelData[0].ToString() == axpRecId)
|
||
{
|
||
delXml = strDelData[1].ToString();
|
||
break;
|
||
}
|
||
}
|
||
return delXml;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Function to get the deleted row info from the server side deleted rows.
|
||
/// </summary>
|
||
/// <param name="delRows"></param>
|
||
/// <returns></returns>
|
||
private string GetDelRowsInServer(string delRows)
|
||
{
|
||
StringBuilder strDelDcData = new StringBuilder();
|
||
//the delrows will be in the below format
|
||
//dc1-recid1,recid2~dc2-recid1,recid2
|
||
if (delRows != string.Empty)
|
||
{
|
||
string[] delRowStr = delRows.Split('~');
|
||
for (int i = 0; i < delRowStr.Length; i++)
|
||
{
|
||
string[] dcStr = delRowStr[i].ToString().Split('-');
|
||
string recIds = string.Empty;
|
||
bool found = false;
|
||
for (int j = AxDelDcNo.Count - 1; j >= 0; j--)
|
||
{
|
||
if (AxDelDcNo[j].ToString() == dcStr[0])
|
||
{
|
||
found = true;
|
||
recIds = AxDelRecIds[j].ToString();
|
||
AxDelDcNo.RemoveAt(j);
|
||
AxDelRecIds.RemoveAt(j);
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (strDelDcData.ToString() != "")
|
||
strDelDcData.Append("~");
|
||
|
||
if (found)
|
||
strDelDcData.Append(dcStr[0] + "-" + dcStr[1] + "," + recIds);
|
||
else
|
||
strDelDcData.Append(dcStr[0] + "-" + dcStr[1]);
|
||
}
|
||
}
|
||
|
||
for (int k = 0; k < AxDelDcNo.Count; k++)
|
||
{
|
||
if (strDelDcData.ToString() != "")
|
||
strDelDcData.Append("~");
|
||
strDelDcData.Append(AxDelDcNo[k] + "-" + AxDelRecIds[k]);
|
||
}
|
||
|
||
return strDelDcData.ToString();
|
||
}
|
||
|
||
public string GetDelRowsNode(string delRows)
|
||
{
|
||
//delrow format will be dcno~recid1,recid2-dcno~recid1,recid2..
|
||
StringBuilder strRows = new StringBuilder();
|
||
//hook to add deleted rows info from server side
|
||
delRows = GetDelRowsInServer(delRows);
|
||
|
||
string[] delRowStr = delRows.Split('~');
|
||
|
||
if (delRows != "")
|
||
{
|
||
strRows.Append("<delrows>");
|
||
for (int i = 0; i < delRowStr.Length; i++)
|
||
{
|
||
string[] dcStr = delRowStr[i].ToString().Split('-');
|
||
strRows.Append("<" + dcStr[0].ToString() + ">");
|
||
string[] strRecIds = dcStr[1].ToString().Split(',');
|
||
for (int j = 0; j < strRecIds.Length; j++)
|
||
{
|
||
string axp_recId = strRecIds[j].ToString();
|
||
string delXml = GetDelRowDataIndex(axp_recId);
|
||
|
||
if (delXml != "")
|
||
strRows.Append(delXml);
|
||
}
|
||
|
||
strRows.Append("</" + dcStr[0].ToString() + ">");
|
||
}
|
||
strRows.Append("</delrows>");
|
||
}
|
||
return strRows.ToString();
|
||
}
|
||
|
||
private string GetChangedRows(string changedRows)
|
||
{
|
||
StringBuilder strRows = new StringBuilder();
|
||
|
||
string[] chngRowStr = changedRows.Split('~');
|
||
if (changedRows != "")
|
||
{
|
||
strRows.Append("<changedrows>");
|
||
for (int i = 0; i < chngRowStr.Length; i++)
|
||
{
|
||
string[] dcStr = chngRowStr[i].ToString().Split('-');
|
||
|
||
strRows.Append("<" + dcStr[0].ToString() + ">");
|
||
strRows.Append(dcStr[1].ToString());
|
||
strRows.Append("</" + dcStr[0].ToString() + ">");
|
||
}
|
||
strRows.Append("</changedrows>");
|
||
}
|
||
else if (recordID == "0")
|
||
strRows.Append("<changedrows>*</changedrows>");
|
||
return strRows.ToString();
|
||
}
|
||
|
||
private string GetAttachTransid()
|
||
{
|
||
string tidValue = string.Empty;
|
||
int idx = tstStrObj.GetFieldIndex("axp_attachtransid");
|
||
if (idx != -1)
|
||
{
|
||
TStructDef.FieldStruct fld = (TStructDef.FieldStruct)tstStrObj.flds[idx];
|
||
tidValue = GetFieldValue(fld.fldframeno.ToString(), fld.name);
|
||
}
|
||
else
|
||
{
|
||
tidValue = tstStrObj.transId;
|
||
}
|
||
return tidValue;
|
||
}
|
||
|
||
|
||
|
||
//save attached file into local
|
||
public void SaveAttached(string files, string RecordId)
|
||
{
|
||
//CommonDir directory creation taken back due to application server memory usage.
|
||
//if (!attachDirPath.Contains(":\\") && !attachDirPath.StartsWith("\\"))
|
||
//{
|
||
// CreateDirectoryInCommonDir(ref attachDirPath);
|
||
//}
|
||
|
||
DirectoryInfo srcDir = new DirectoryInfo(scriptsPath + "Axpert\\" + sessionid);
|
||
string tidValue = string.Empty;
|
||
//string schemaName = project;
|
||
tidValue = GetAttachTransid();
|
||
|
||
DirectoryInfo desDir = new DirectoryInfo(attachDirPath + "\\" + tidValue + "\\");
|
||
if (files != string.Empty)
|
||
{
|
||
string[] fnames = files.Split(',');
|
||
string[] sFileName = new string[fnames.Length];
|
||
for (int i = 0; i < fnames.Length; i++)
|
||
sFileName[i] = Directory.GetFiles(scriptsPath + "Axpert\\" + sessionid, fnames[i])[0];
|
||
|
||
string sFileDir = scriptsPath + "Axpert\\" + sessionid;
|
||
string desPath = attachDirPath + "\\" + tidValue + "\\";
|
||
try
|
||
{
|
||
//Save File on disk
|
||
if (!desDir.Exists)
|
||
desDir.Create();
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
throw ex;
|
||
}
|
||
string authenticationStatus = string.Empty;
|
||
if (util.GetAuthentication(ref authenticationStatus))
|
||
{
|
||
foreach (var file in sFileName)
|
||
File.Copy(file, Path.Combine(desPath, RecordId + "-" + Path.GetFileName(file)), true);
|
||
}
|
||
}
|
||
//Delete the files from folder
|
||
if (removeFiles.Count > 0 && desDir.Exists)
|
||
{
|
||
for (int i = 0; i < removeFiles.Count; i++)
|
||
{
|
||
try
|
||
{
|
||
foreach (FileInfo fi in desDir.GetFiles(removeFiles[i].ToString().Replace("%20", " ")))
|
||
fi.Delete();
|
||
}
|
||
catch { }
|
||
}
|
||
}
|
||
}
|
||
|
||
protected void RemoveUnwantedAxpFiles(string transid, string recId, string delRows, TStructData tstData, ArrayList deletedFldArrayValues)
|
||
{
|
||
try
|
||
{
|
||
GetGlobalAttachPath();
|
||
ArrayList lstAttFileServer = new ArrayList();
|
||
if (HttpContext.Current.Session["AxpAttFileServer"] != null)
|
||
lstAttFileServer = (ArrayList)HttpContext.Current.Session["AxpAttFileServer"];
|
||
|
||
foreach (var axpFlds in tstStrObj.AxpFileUploadFields)
|
||
{
|
||
if (!axpFlds.ToString().ToLower().StartsWith("axpfilepath_"))
|
||
{
|
||
int idx = tstStrObj.GetFieldIndex(axpFlds.ToString());
|
||
TStructDef.FieldStruct fld = (TStructDef.FieldStruct)tstStrObj.flds[idx];
|
||
int axpFldDcNo = fld.fldframeno;
|
||
DataTable oldDcTable = dsDataSet.Tables["deldc" + axpFldDcNo];
|
||
if (oldDcTable != null && oldDcTable.Rows.Count > 0)
|
||
RemoveDeletedRowAxpFiles(oldDcTable, axpFlds.ToString());
|
||
|
||
var axpFld = lstAttFileServer.Cast<string>().Where(i => i.StartsWith(axpFlds + "~")).ToArray();
|
||
if (axpFld.Count() == 0)
|
||
continue;
|
||
else
|
||
{
|
||
// Need to remove saved files from list.
|
||
DataTable dcTable = dsDataSet.Tables["dc" + axpFldDcNo];
|
||
DataView dv = new DataView(dcTable);
|
||
dv.Sort = "axp__rowno ASC";
|
||
dcTable = dv.ToTable();
|
||
string axpGrAttPath = string.Empty;
|
||
for (int j = 0; j < dcTable.Rows.Count; j++)
|
||
{
|
||
string axpValues = string.Empty;
|
||
axpValues = dcTable.Rows[j][axpFlds.ToString()].ToString();
|
||
foreach (var existFiles in axpValues.Split(','))
|
||
{
|
||
var removeValue = lstAttFileServer.Cast<string>().Where(i => i.StartsWith(axpFlds + "~") && i.EndsWith(existFiles)).ToArray();
|
||
if (removeValue.Count() > 0)
|
||
lstAttFileServer.Remove(removeValue[0]);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if (deletedFldArrayValues.Count > 0)
|
||
{
|
||
foreach (var delFile in deletedFldArrayValues)
|
||
{
|
||
string[] dltfnameval = delFile.ToString().Split('~');
|
||
string dlFName = dltfnameval[0].Substring(0, dltfnameval[0].LastIndexOf("F") - 3);
|
||
string dlRow = dltfnameval[0].Substring(dltfnameval[0].LastIndexOf("F") - 3, 3);
|
||
var dlFullname = lstAttFileServer.Cast<string>().Where(i => i.StartsWith(dlFName + "~") && i.EndsWith(dltfnameval[1])).ToArray();
|
||
// TO delete file from folder and remove from list which are deleted before save the transaction
|
||
if (dlFullname.Count() > 0)
|
||
{
|
||
lstAttFileServer.Remove(dlFullname[0]);
|
||
string dlFullPath = dlFullname[0].Replace(dlFName + "~", "");
|
||
RemoveDeletedAxpFileFromFolder(dlFullPath);
|
||
}
|
||
else
|
||
{
|
||
// To delete file from folder after load transaction and delete files
|
||
var axpfilepath_ = tstStrObj.AxpFileUploadFields.Cast<string>().Where(i => i.ToLower().StartsWith("axpfilepath") && i.EndsWith("_" + dlFName.ToString().Substring(8))).ToArray();
|
||
int idx = tstStrObj.GetFieldIndex(dlFName.ToString());
|
||
TStructDef.FieldStruct fld = (TStructDef.FieldStruct)tstStrObj.flds[idx];
|
||
int axpFldDcNo = fld.fldframeno;
|
||
DataTable dcTable = dsDataSet.Tables["dc" + axpFldDcNo];
|
||
bool isDcGrid = false;
|
||
isDcGrid = IsDcGrid(axpFldDcNo.ToString(), tstStrObj);
|
||
int rNo = 0;
|
||
if (isDcGrid)
|
||
rNo = int.Parse(dlRow) - 1;
|
||
else
|
||
rNo = int.Parse(dlRow);
|
||
string axpFPath = string.Empty;
|
||
if (dcTable.Rows.Count > 0)
|
||
axpFPath = dcTable.Rows[rNo][axpfilepath_[0]].ToString();
|
||
if (axpFPath == string.Empty)
|
||
axpFPath = HttpContext.Current.Session["grdAttPath"].ToString();
|
||
if (axpFPath.EndsWith("*"))
|
||
{
|
||
string axpFilePath = axpFPath.Substring(0, axpFPath.LastIndexOf('\\')) + "\\";
|
||
string PrefixFilename = axpFPath.Substring(axpFPath.LastIndexOf("\\") + 1).Replace("*", "");
|
||
string axpFileName = dltfnameval[1];
|
||
if (PrefixFilename != string.Empty)
|
||
axpFileName = PrefixFilename + axpFileName;
|
||
RemoveDeletedAxpFileFromFolder(axpFilePath + axpFileName);
|
||
}
|
||
else
|
||
RemoveDeletedAxpFileFromFolder(axpFPath + dltfnameval[1]);
|
||
}
|
||
}
|
||
}
|
||
if (lstAttFileServer.Count > 0)
|
||
HttpContext.Current.Session["AxpAttFileServer"] = lstAttFileServer;
|
||
else
|
||
HttpContext.Current.Session["AxpAttFileServer"] = null;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
logobj.CreateLog("Error while deleting-" + ex.Message, sessionid, "RemoveUnwantedAxpFiles", "new");
|
||
}
|
||
}
|
||
|
||
protected void RemoveDeletedRowAxpFiles(DataTable oldDcTable, string axpFld)
|
||
{
|
||
try
|
||
{
|
||
var axpfilepath_ = tstStrObj.AxpFileUploadFields.Cast<string>().Where(i => i.ToLower().StartsWith("axpfilepath") && i.EndsWith("_" + axpFld.ToString().Substring(8))).ToArray();
|
||
string axpFPath = string.Empty;
|
||
string axpValues = string.Empty;
|
||
for (int j = 0; j < oldDcTable.Rows.Count; j++)
|
||
{
|
||
axpFPath = oldDcTable.Rows[j][axpfilepath_[0]].ToString();
|
||
axpValues = oldDcTable.Rows[j][axpFld].ToString();
|
||
if (axpFPath == string.Empty)
|
||
axpFPath = HttpContext.Current.Session["grdAttPath"].ToString();
|
||
foreach (var existFiles in axpValues.Split(','))
|
||
{
|
||
if (axpFPath.EndsWith("*"))
|
||
{
|
||
string axpFilePath = axpFPath.Substring(0, axpFPath.LastIndexOf('\\')) + "\\";
|
||
string PrefixFilename = axpFPath.Substring(axpFPath.LastIndexOf("\\") + 1).Replace("*", "");
|
||
string existFile = existFiles;
|
||
if (PrefixFilename != string.Empty)
|
||
existFile = PrefixFilename + existFiles;
|
||
RemoveDeletedAxpFileFromFolder(axpFilePath + existFile);
|
||
}
|
||
else
|
||
RemoveDeletedAxpFileFromFolder(axpFPath + existFiles);
|
||
}
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
logobj.CreateLog("Error while deleting OldFiles-" + ex.Message, sessionid, "RemoveDeletedRowAxpFiles", "new");
|
||
}
|
||
}
|
||
|
||
protected void RemoveDeletedAxpFileFromFolder(string fullPath)
|
||
{
|
||
try
|
||
{
|
||
File.Delete(fullPath);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
logobj.CreateLog("Error while RemoveDeletedAxpFileFromFolder-" + ex.Message, sessionid, "RemoveDeletedAxpFileFromFolder", "new");
|
||
}
|
||
}
|
||
|
||
|
||
public string CallSaveDataWS(TStructData tstData, ArrayList fldArray, ArrayList fldDbRowNo, ArrayList fldValueArray, ArrayList fldDeletedArray, ArrayList deletedFldArrayValues, string files, string rid, string delRows, string changedRows)
|
||
{
|
||
|
||
DateTime stTime = DateTime.Now;
|
||
string successMsg = string.Empty;
|
||
string gridAttSaveResult = string.Empty;
|
||
string AxRelKeys = string.Empty;
|
||
bool holdpopup = false;
|
||
if (!string.IsNullOrEmpty(files))
|
||
UpdateAttachments(files);
|
||
string filesCpy = files;
|
||
if (attachDir)
|
||
files = "";
|
||
|
||
|
||
string cngRows = GetChangedRows(changedRows);
|
||
|
||
transid = tstData.transid.ToString();
|
||
filename = "save-" + transid;
|
||
errlog = logobj.CreateLog("Saving Data", sessionid, filename, "new");
|
||
string imagefromdb = "false";
|
||
if (HttpContext.Current.Session["AxpSaveImageDb"] != null)
|
||
imagefromdb = HttpContext.Current.Session["AxpSaveImageDb"].ToString();
|
||
serviceInputXml = "<Transaction axpapp=\"" + project + "\" imagefromdb=\"" + imagefromdb + "\" afiles=\"" + files + "\" trace=\"" + errlog + "\" sessionid=\"" + sessionid + "\" appsessionkey='" + HttpContext.Current.Session["AppSessionKey"].ToString() + "' username='" + HttpContext.Current.Session["username"].ToString() + "'><data transid=\"" + transid + "\" recordid=\"" + rid + "\"> ";
|
||
result = string.Empty;
|
||
logobj.CreateLog("Cross checking field value xml length sent from client and received xml length", sessionid, filename, "");
|
||
//call a function to delete the default row in pop grid
|
||
DeleteDefaultRowInPopDc(project, user, transid, sessionid, AxRole);
|
||
isSaveCalled = true;
|
||
tstData.GetFieldValueXml(fldArray, fldDbRowNo, fldValueArray, fldDeletedArray, "-1", "true", "ALL", "");
|
||
delRows = GetDelRowsNode(delRows);
|
||
isSaveCalled = false;
|
||
if (tstData.fldValueXml.Contains("docid"))
|
||
{
|
||
holdpopup = true;
|
||
}
|
||
|
||
serviceInputXml += tstData.fldValueXml + memVarsData + "</data>";
|
||
serviceInputXml += delRows + cngRows;
|
||
serviceInputXml += HttpContext.Current.Session["axApps"].ToString() + HttpContext.Current.Application["axProps"].ToString() + HttpContext.Current.Session["axGlobalVars"].ToString() + HttpContext.Current.Session["axUserVars"].ToString();
|
||
serviceInputXml += "</Transaction>";
|
||
logobj.CreateLog("Call to SaveData Web Service", sessionid, filename, "");
|
||
ires = tstStrObj.structRes;
|
||
//Call service
|
||
objWebServiceExt = new ASBExt.WebServiceExt();
|
||
DateTime asStart = DateTime.Now;
|
||
result = objWebServiceExt.CallSaveDataWS(transid, serviceInputXml, ires);
|
||
string requestProcess_logtime = result.Split('♠')[0];
|
||
result = result.Split('♠')[1];
|
||
DateTime asEnd = DateTime.Now;
|
||
logobj.CreateLog("End Time : " + DateTime.Now.ToString(), sessionid, filename, "");
|
||
|
||
//{"message":[{"msg":"Master Saved,recordid=20054000000070"}]}
|
||
result = result.Replace("\\", ";bkslh");
|
||
//To save the image fields in server folders,
|
||
//the below code checks if the record is saved and copies the images to the folders.
|
||
if (result.ToLower().Contains("ora-"))
|
||
{
|
||
result = result.Replace("ora-", "");
|
||
result = result.Replace("ORA-", "");
|
||
}
|
||
if (!result.StartsWith(Constants.ERROR))
|
||
{
|
||
string returnStr = result.Replace("*$*", "¿");
|
||
string[] newResult = returnStr.Split('¿');
|
||
for (int i = 0; i < newResult.Length; i++)
|
||
{
|
||
JArray msg, rslt;
|
||
try
|
||
{
|
||
JObject message = JObject.Parse(newResult[i].ToString());
|
||
msg = (JArray)message["message"];
|
||
rslt = (JArray)message["result"];
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
throw ex;
|
||
}
|
||
if (rslt != null)
|
||
{
|
||
string saveStatus = rslt[0].SelectToken("save").ToString();
|
||
if (saveStatus == "success" && util.isRealTimeCacEnabled(transid, tstStrObj))
|
||
AxRelKeys = util.GetAxRelations(tstData.transid);
|
||
if (saveStatus == "success" && transID == "axstc")
|
||
{
|
||
DataTable dt = tstData.dsDataSet.Tables["dc1"];
|
||
if (dt != null && dt.Rows.Count > 0)
|
||
{
|
||
string props = dt.Rows[0]["PROPS"].ToString();
|
||
if (props.ToLower() == "general")
|
||
util.ClearAxpStructConfigInRedis(Constants.AXCONFIGGENERAL, transID, GetFieldValue("1", "userroles"), "general", "");
|
||
else
|
||
{
|
||
string stype = dt.Rows[0]["STYPE"].ToString();
|
||
string sname = dt.Rows[0]["STRUCTNAME"].ToString();
|
||
if (stype == "Tstruct")
|
||
util.ClearAxpStructConfigInRedis(Constants.AXCONFIGTSTRUCT, transID, GetFieldValue("1", "userroles"), "tstruct", sname);
|
||
if (stype == "Iview")
|
||
{
|
||
util.ClearAxpStructConfigInRedis(Constants.AXCONFIGTSTRUCT, transID, GetFieldValue("1", "userroles"), "iview", sname);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if (msg != null)
|
||
{
|
||
string saveResult = msg[0].SelectToken("msg").ToString();
|
||
|
||
if (saveResult.IndexOf(',') != -1)
|
||
{
|
||
string recId = "";
|
||
string[] resultData = saveResult.Split(',');
|
||
if (resultData.Length > 1)
|
||
{
|
||
successMsg = resultData[0];
|
||
if (resultData[resultData.Length - 1].ToString().IndexOf("=") != -1 && resultData[resultData.Length - 1].ToString().IndexOf("recordid") != -1)
|
||
{
|
||
string[] recordDts = resultData[resultData.Length - 1].ToString().Split('=');
|
||
recId = recordDts[1].ToString();
|
||
}
|
||
else if (resultData[resultData.Length - 1].ToString().IndexOf("=") == -1 && Array.FindIndex(resultData, x => x.Trim().Contains("recordid=")) > -1)
|
||
{
|
||
int recIdx = Array.FindIndex(resultData, x => x.Contains("recordid"));
|
||
if (resultData[recIdx].ToString().Contains("="))
|
||
{
|
||
string[] recordDts = resultData[recIdx].ToString().Split('=');
|
||
recId = recordDts[1].ToString();
|
||
}
|
||
}
|
||
else
|
||
{
|
||
continue;
|
||
}
|
||
}
|
||
|
||
if (recId != string.Empty)
|
||
{
|
||
if (tstStrObj.AxpFileUploadFields.Count > 0)
|
||
RemoveUnwantedAxpFiles(transid, recId, delRows, tstData, deletedFldArrayValues);
|
||
|
||
if (tstStrObj.ContainsGridAttach)
|
||
{
|
||
try
|
||
{
|
||
gridAttSaveResult = SaveGridAttachments(transid, sessionid, recId, delRows, tstData, changedRows, deletedFldArrayValues);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
logobj.CreateLog("Error while SaveGridAttachments-" + ex.Message, sessionid, "SaveGridAttachments", "new", "true");
|
||
}
|
||
}
|
||
|
||
if (tstStrObj.ContainsImage)
|
||
{
|
||
string authenticationStatus = string.Empty;
|
||
bool isAuthenticated = util.GetAuthentication(ref authenticationStatus);
|
||
SaveImageToFolder(tstStrObj, transid, sessionid, recId, deletedFldArrayValues);
|
||
}
|
||
//Save the attach file into the dir
|
||
if (attachDir && (!string.IsNullOrEmpty(filesCpy) || removeFiles.Count > 0))
|
||
SaveAttached(filesCpy, recId);
|
||
try
|
||
{
|
||
Custom custObj = Custom.Instance;
|
||
custObj.AxAfterAttSave(transid, sessionid, recId);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
|
||
}
|
||
RefFastDataOnSave("save");
|
||
RefInMemOnSave();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if (logTimeTaken)
|
||
{
|
||
webTime1 = asStart.Subtract(stTime).TotalMilliseconds;
|
||
webTime2 = DateTime.Now.Subtract(asEnd).TotalMilliseconds;
|
||
asbTime = asEnd.Subtract(asStart).TotalMilliseconds;
|
||
}
|
||
if (AxRelKeys != string.Empty)
|
||
result = result + "*#*" + AxRelKeys;
|
||
if (holdpopup != false)
|
||
{
|
||
result = "{" + "\"holdpopup\"" + ":[{" + "\"hold\"" + ":\" " + holdpopup + "\"}]}" + "*$*" + result;
|
||
}
|
||
if (gridAttSaveResult != string.Empty)
|
||
{
|
||
result = "{" + "\"GridAttachments\"" + ":[{" + "\"Message\"" + ":\" Attachment is not Saved : " + gridAttSaveResult + "\"}]}" + "*$*" + result;
|
||
}
|
||
result = requestProcess_logtime + "♠" + result;
|
||
return result;
|
||
}
|
||
|
||
private void ModifyAsNewRecord()
|
||
{
|
||
if (dsDataSet.Tables.Count > 0)
|
||
{
|
||
for (int i = 1; i <= tstStrObj.dcs.Count; i++)
|
||
{
|
||
DataTable dt = dsDataSet.Tables["dc" + i];
|
||
if (dt.Rows.Count > 0)
|
||
{
|
||
if (((TStructDef.DcStruct)(tstStrObj.dcs[i - 1])).isgrid)
|
||
{
|
||
foreach (DataRow row in dt.Rows)
|
||
{
|
||
row["axp_recid" + i] = "0";
|
||
}
|
||
}
|
||
else
|
||
{
|
||
dt.Rows[0]["axp_recid" + i] = "0";
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
public string CallWorkFlowActionWS(TStructData tstData, ArrayList fldArray, ArrayList fldDbRowNo, ArrayList fldValueArray, ArrayList fldDeletedArray, string files, string rid, string inputXml)
|
||
{
|
||
if (!string.IsNullOrEmpty(files))
|
||
{
|
||
UpdateAttachments(files);
|
||
}
|
||
//GetGlobalVars();
|
||
transid = tstData.transid.ToString();
|
||
filename = "WorkFlow-" + transid;
|
||
errlog = logobj.CreateLog("Saving Workflow Data", sessionid, filename, "new");
|
||
result = string.Empty;
|
||
logobj.CreateLog("Cross checking field value xml length send from client and received xml length", sessionid, filename, "");
|
||
//call a function to delete the default row in pop grid
|
||
DeleteDefaultRowInPopDc(project, user, transid, sessionid, AxRole);
|
||
|
||
tstData.GetFieldValueXml(fldArray, fldDbRowNo, fldValueArray, fldDeletedArray, "-1", "true", "ALL", "");
|
||
inputXml += "<data>" + tstData.fldValueXml + "</data>";
|
||
inputXml += HttpContext.Current.Session["axApps"].ToString() + HttpContext.Current.Application["axProps"].ToString() + HttpContext.Current.Session["axGlobalVars"].ToString() + HttpContext.Current.Session["axUserVars"].ToString() + "</root>";
|
||
logobj.CreateLog("Call to WorkFlowAction Web Service", sessionid, filename, "");
|
||
//Call service
|
||
objWebServiceExt = new ASBExt.WebServiceExt();
|
||
result = objWebServiceExt.CallWorkFlowActionWS(transid, inputXml);
|
||
logobj.CreateLog("End Time : " + DateTime.Now.ToString(), sessionid, filename, "");
|
||
return result;
|
||
}
|
||
|
||
|
||
public string GetErrorInResultJson(string result)
|
||
{
|
||
result = result.Replace("\\", ";bkslh");
|
||
result = result.Replace("^^dq", "\"");
|
||
string returnStr = result.Replace("*$*", "¿");
|
||
string[] newResult = returnStr.Split('¿');
|
||
for (int i = 0; i < newResult.Length; i++)
|
||
{
|
||
JArray msg;
|
||
try
|
||
{
|
||
JObject message = JObject.Parse(newResult[i].ToString());
|
||
msg = (JArray)message["error"];
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
throw ex;
|
||
}
|
||
|
||
if (msg != null)
|
||
{
|
||
string saveResult = msg[0].SelectToken("msg").ToString();
|
||
saveResult = saveResult.Remove(0, 1);
|
||
saveResult = saveResult.Remove(saveResult.Length - 1, 1);
|
||
return saveResult;
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
|
||
private string SaveGridAttachments(string transid, string sid, string recId, string delRows, TStructData tstData, string changedRows, ArrayList deletedFldArrayValues)
|
||
{
|
||
GetGlobalAttachPath();
|
||
string saveResult = string.Empty;
|
||
|
||
if (recId != "0")
|
||
{
|
||
string sourceFilePath = scriptsPath + "axpert\\" + sid;
|
||
string destFilePath = string.Empty;
|
||
string grdAttPath = string.Empty;
|
||
bool hasMultipleFiles = false;
|
||
bool isAxpAttachFld = false;
|
||
hasImagePath = false;
|
||
string fldName = string.Empty;
|
||
ArrayList attFldNames = new ArrayList();
|
||
ArrayList attDestPath = new ArrayList();
|
||
ArrayList attFileNames = new ArrayList();
|
||
StringBuilder strFiles = new StringBuilder();
|
||
ArrayList attWantToDelete = new ArrayList();
|
||
//string schemaName = project;
|
||
string attachTid = GetAttachTransid();
|
||
int attTotalFileCount = 0;
|
||
int attDelFileCount = 0;
|
||
int attSavedFileCount = 0;
|
||
ArrayList isRecordFile = new ArrayList();
|
||
//bool isRecordFile = false;
|
||
if (HttpContext.Current.Session["attGridFileServer"] != null && HttpContext.Current.Session["attGridFileServer"].ToString() != string.Empty)
|
||
{
|
||
string attTotalFile = HttpContext.Current.Session["attGridFileServer"].ToString();
|
||
string[] attTotalFiles = attTotalFile.Split('♦');
|
||
attTotalFileCount = attTotalFiles.Length;
|
||
}
|
||
|
||
bool deletedGridFilesExist = false;
|
||
foreach (var attFld in tstStrObj.AxAttachFields)
|
||
{
|
||
int idx = tstStrObj.GetFieldIndex(attFld.ToString());
|
||
TStructDef.FieldStruct fld = (TStructDef.FieldStruct)tstStrObj.flds[idx];
|
||
|
||
if ((fld.name.StartsWith("dc") && fld.name.ToLower().EndsWith("_image") || fld.name.StartsWith("axp_gridattach_")) && IsDcGrid(fld.fldframeno.ToString(), tstStrObj))
|
||
{
|
||
TStructDef.DcStruct dc = (TStructDef.DcStruct)tstStrObj.dcs[fld.fldframeno - 1];
|
||
fldName = fld.name;
|
||
|
||
//For all attachment fields now the global variables AxpImageServer and AxpImagePath will be used for destination path
|
||
// GetGlobalAttachPath();
|
||
grdAttPath = HttpContext.Current.Session["grdAttPath"].ToString();
|
||
DataTable dcTable = dsDataSet.Tables["dc" + dc.frameno];
|
||
|
||
DataTable dcDelRowTable = dsDataSet.Tables["deldc" + dc.frameno];
|
||
|
||
bool hasDcImagePath = false;
|
||
hasDcImagePath = dcTable.Columns.Contains("dc" + dc.frameno + "_imagepath");
|
||
hasImagePath = hasDcImagePath;
|
||
|
||
if (dc.DCHasDataRows && (grdAttPath != string.Empty || hasDcImagePath == true))
|
||
{
|
||
if (!grdAttPath.EndsWith("\\"))
|
||
grdAttPath = grdAttPath + "\\";
|
||
|
||
string value = string.Empty;
|
||
string destFileName = string.Empty;
|
||
string sfileEx = string.Empty;
|
||
|
||
|
||
bool hasAxpAttachCol = false;
|
||
hasAxpAttachCol = dcTable.Columns.Contains("axp_gridattach_" + dc.frameno);
|
||
bool hasAxpAttFileName = false;
|
||
hasAxpAttFileName = dcTable.Columns.Contains("axpattach_filename" + dc.frameno);
|
||
|
||
DataView dv = new DataView(dcTable);
|
||
dv.Sort = "axp__rowno ASC";
|
||
dcTable = dv.ToTable();
|
||
string axpGrAttPath = string.Empty;
|
||
int delRowCnt = 0;
|
||
for (int j = 0; j < dcTable.Rows.Count; j++)
|
||
{
|
||
//If dc_image is used for referimages, then don't add the referred files for saving, save only newly attached files
|
||
if (!hasAxpAttachCol)
|
||
value = GetFilesforSave(dcTable.Rows[j][fld.name].ToString());
|
||
else
|
||
value = dcTable.Rows[j]["axp_gridattach_" + dc.frameno].ToString();
|
||
|
||
if (value == string.Empty && (changedRows != string.Empty || delRows == string.Empty) && !hasDcImagePath && !hasAxpAttachCol && (fld.name.StartsWith("dc" + dc.frameno + "_image")))
|
||
{
|
||
try
|
||
{
|
||
DataTable oldDcTable = dsDataSet.Tables["dc_old" + dc.frameno];
|
||
if (dsDataSet.Tables["dc_old" + dc.frameno].Rows[0]["old__" + fld.name].ToString() != string.Empty)
|
||
{
|
||
deletedGridFilesExist = true;
|
||
}
|
||
}
|
||
catch (Exception ex) { }
|
||
}
|
||
|
||
if (value.Contains(","))
|
||
hasMultipleFiles = true;
|
||
|
||
if (value == string.Empty && HttpContext.Current.Session["attGridFileServer"] != null && HttpContext.Current.Session["attGridFileServer"].ToString() != string.Empty)
|
||
{
|
||
string attServerFiles = HttpContext.Current.Session["attGridFileServer"].ToString();
|
||
string[] lstServerFiles = attServerFiles.Split('♦');
|
||
int irow = j + 1;
|
||
var lstServerFile = lstServerFiles.AsEnumerable().Where(x => x.StartsWith(fldName + irow + "~") && x.Contains(HttpContext.Current.Session["username"].ToString() + "-")).ToList();
|
||
string authenticationStatus = string.Empty;
|
||
if (lstServerFile.Count > 0 && util.GetAuthentication(ref authenticationStatus))
|
||
{
|
||
foreach (var lst in lstServerFile)
|
||
{
|
||
string savedFileName = lst.Split('~')[1];
|
||
File.Delete(savedFileName);
|
||
attDelFileCount++;
|
||
HttpContext.Current.Session["attGridFileServer"] = attServerFiles = attServerFiles.Replace(lst + "♦", "").Replace(lst, "");
|
||
}
|
||
}
|
||
}
|
||
|
||
if (value != string.Empty || deletedGridFilesExist)
|
||
{
|
||
//If axp_gridattach
|
||
if (hasAxpAttachCol)
|
||
{
|
||
if (hasAxpAttFileName && !hasMultipleFiles)
|
||
{
|
||
sfileEx = value.Substring(value.LastIndexOf("."));
|
||
destFileName = dcTable.Rows[j]["axpattach_filename" + dc.frameno].ToString() + sfileEx;
|
||
}
|
||
isAxpAttachFld = true;
|
||
//destFilePath = grdAttPath + schemaName + "\\" + attachTid + "\\" + recId + "\\" + fld.name;
|
||
destFilePath = grdAttPath + "\\" + attachTid + "\\" + recId + "\\" + fld.name;
|
||
}
|
||
else if (fld.name.StartsWith("dc") && fld.name.ToLower().EndsWith("_image") && !hasDcImagePath)
|
||
{
|
||
//destFilePath = grdAttPath + schemaName + "\\" + attachTid + "\\" + fld.name;
|
||
destFilePath = grdAttPath + "\\" + attachTid + "\\" + fld.name;
|
||
}
|
||
else if (hasDcImagePath && !hasAxpAttachCol)
|
||
{
|
||
if (dcTable.Rows[j]["dc" + +dc.frameno + "_imagepath"].ToString() != string.Empty)
|
||
{
|
||
hasImagePath = true;
|
||
grdAttPath = GetdcImagePath(dcTable.Rows[j]["dc" + +dc.frameno + "_imagepath"].ToString());
|
||
destFilePath = grdAttPath;
|
||
}
|
||
else
|
||
{
|
||
string errorLog = string.Empty;
|
||
string errMessage = "Value for dc_imagepath field is not specified";
|
||
errorLog = logobj.CreateLog("Error in Saving Grid attachments - " + errMessage, sid, "GridAttachments", "new");
|
||
saveResult = errMessage;
|
||
|
||
}
|
||
}
|
||
}
|
||
|
||
if ((value != string.Empty || deletedGridFilesExist) && destFilePath != string.Empty)
|
||
{
|
||
try
|
||
{
|
||
DirectoryInfo di = new DirectoryInfo(destFilePath);
|
||
if (!di.Exists)
|
||
di.Create();
|
||
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
saveResult = "Destination Path is empty";
|
||
}
|
||
if (destFileName != "") value = destFileName;
|
||
string[] fileNames = value.Split(',');
|
||
//These arrays will be used to delete the deleted attachments
|
||
attFldNames.Add(fldName);
|
||
if (attDestPath.Count > 0)
|
||
{
|
||
if (attDestPath.IndexOf(destFilePath) == -1)
|
||
{
|
||
attDestPath.Add(destFilePath);
|
||
if (hasImagePath || hasAxpAttachCol)
|
||
isRecordFile.Add("false");
|
||
else
|
||
isRecordFile.Add("true");
|
||
}
|
||
}
|
||
else
|
||
{
|
||
attDestPath.Add(destFilePath);
|
||
if (hasImagePath || hasAxpAttachCol)
|
||
isRecordFile.Add("false");
|
||
else
|
||
isRecordFile.Add("true");
|
||
}
|
||
|
||
for (int fIdx = 0; fIdx < fileNames.Length; fIdx++)
|
||
{
|
||
if (HttpContext.Current.Session["attGridFileServer"] != null && HttpContext.Current.Session["attGridFileServer"].ToString() != string.Empty)
|
||
{
|
||
int irow = j + delRowCnt + 1;
|
||
if (dcDelRowTable != null && dcDelRowTable.Rows.Count > 0)
|
||
{
|
||
int iDelrow = j + 1;
|
||
var delRowList = dcDelRowTable.AsEnumerable().Where(s => s.Field<string>("axp__delrow") == iDelrow.ToString()).Select(s => s.Field<string>("axp__delrow")).ToList();
|
||
if (delRowList != null && delRowList.Count > 0)
|
||
{
|
||
string attServerFiless = HttpContext.Current.Session["attGridFileServer"].ToString();
|
||
string[] lstServerFiless = attServerFiless.Split('♦');
|
||
var lstMatchFiles = lstServerFiless.AsEnumerable().Where(x => x.StartsWith(fldName + irow + "~") && x.Contains(HttpContext.Current.Session["username"].ToString() + "-")).ToList();
|
||
delRowCnt = delRowCnt + 1;
|
||
irow = irow + 1;
|
||
foreach (var lst in lstMatchFiles)
|
||
{
|
||
string savedFileName = lst.Split('\\').Last();
|
||
string attdestFilePath = string.Empty;
|
||
attdestFilePath = destFilePath + "\\" + savedFileName;
|
||
// File.Delete(attdestFilePath);
|
||
attWantToDelete.Add(attdestFilePath);
|
||
HttpContext.Current.Session["attGridFileServer"] = attServerFiless.Replace(lst + "♦", "").Replace(lst, "");
|
||
}
|
||
}
|
||
}
|
||
string attServerFiles = HttpContext.Current.Session["attGridFileServer"].ToString();
|
||
string[] lstServerFiles = attServerFiles.Split('♦');
|
||
|
||
|
||
var lstServerFile = lstServerFiles.AsEnumerable().Where(x => x.StartsWith(fldName + irow + "~") && x.Contains(HttpContext.Current.Session["username"].ToString() + "-")).ToList();
|
||
string authenticationStatus = string.Empty;
|
||
if (lstServerFile.Count > 0 && util.GetAuthentication(ref authenticationStatus))
|
||
{
|
||
foreach (var lst in lstServerFile)
|
||
{
|
||
string savedFileName = lst.Split('\\').Last();// lst.Split('~')[1];
|
||
string attdestFilePath = string.Empty;
|
||
attdestFilePath = destFilePath + "\\" + savedFileName;
|
||
string atFileName = savedFileName.Replace(HttpContext.Current.Session["username"].ToString() + "-", "");
|
||
var saveFileLst = fileNames.AsEnumerable().Where(x => x == atFileName).ToList();
|
||
if (saveFileLst.Count > 0)
|
||
{
|
||
if (fileNames[fIdx] == atFileName)
|
||
{
|
||
if (hasAxpAttachCol)
|
||
{
|
||
string renameFilePath = grdAttPath + attachTid + "\\" + HttpContext.Current.Session["username"].ToString() + "\\" + fld.name;
|
||
axpGrAttPath = grdAttPath + attachTid + "\\" + HttpContext.Current.Session["username"].ToString();
|
||
if (File.Exists(renameFilePath + "\\" + savedFileName))
|
||
Microsoft.VisualBasic.FileIO.FileSystem.RenameFile(renameFilePath + "\\" + savedFileName, atFileName);
|
||
renameFilePath = renameFilePath + "\\" + atFileName;
|
||
destFilePath = destFilePath + "\\" + atFileName;
|
||
File.Move(@renameFilePath, @destFilePath);
|
||
attSavedFileCount++;
|
||
if (strFiles.ToString() == string.Empty)
|
||
strFiles.Append(atFileName);
|
||
else
|
||
strFiles.Append("," + atFileName);
|
||
|
||
}
|
||
else if (hasImagePath)
|
||
{
|
||
File.Delete(destFilePath + "\\" + atFileName);
|
||
Microsoft.VisualBasic.FileIO.FileSystem.RenameFile(attdestFilePath, atFileName);
|
||
if (strFiles.ToString() == string.Empty)
|
||
strFiles.Append(atFileName);
|
||
else
|
||
strFiles.Append("," + atFileName);
|
||
attSavedFileCount++;
|
||
}
|
||
else
|
||
{
|
||
File.Delete(destFilePath + "\\" + recId + "-" + atFileName);
|
||
Microsoft.VisualBasic.FileIO.FileSystem.RenameFile(attdestFilePath, recId + "-" + atFileName);
|
||
if (strFiles.ToString() == string.Empty)
|
||
strFiles.Append(recId + "-" + atFileName);
|
||
else
|
||
strFiles.Append("," + recId + "-" + atFileName);
|
||
attSavedFileCount++;
|
||
}
|
||
HttpContext.Current.Session["attGridFileServer"] = attServerFiles = attServerFiles.Replace(lst + "♦", "").Replace(lst, "");
|
||
}
|
||
else
|
||
{
|
||
if (hasImagePath || hasAxpAttachCol)
|
||
{
|
||
if (strFiles.ToString() == string.Empty)
|
||
strFiles.Append(fileNames[fIdx]);
|
||
else
|
||
strFiles.Append("," + fileNames[fIdx]);
|
||
}
|
||
else
|
||
{
|
||
if (strFiles.ToString() == string.Empty)
|
||
strFiles.Append(recId + "-" + fileNames[fIdx]);
|
||
else
|
||
strFiles.Append("," + recId + "-" + fileNames[fIdx]);
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (hasImagePath || hasAxpAttachCol)
|
||
{
|
||
if (strFiles.ToString() == string.Empty)
|
||
strFiles.Append(fileNames[fIdx]);
|
||
else
|
||
strFiles.Append("," + fileNames[fIdx]);
|
||
}
|
||
else
|
||
{
|
||
if (strFiles.ToString() == string.Empty)
|
||
strFiles.Append(recId + "-" + fileNames[fIdx]);
|
||
else
|
||
strFiles.Append("," + recId + "-" + fileNames[fIdx]);
|
||
}
|
||
attDelFileCount++;
|
||
File.Delete(attdestFilePath);
|
||
HttpContext.Current.Session["attGridFileServer"] = attServerFiles = attServerFiles.Replace(lst + "♦", "").Replace(lst, "");
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
string fNames = fileNames[fIdx].ToString();
|
||
if (fNames == "") continue;
|
||
if (!hasDcImagePath && !hasAxpAttachCol)
|
||
fNames = recId + "-" + fileNames[fIdx].ToString();
|
||
if (strFiles.ToString() == string.Empty)
|
||
strFiles.Append(fNames);
|
||
else
|
||
strFiles.Append("," + fNames);
|
||
}
|
||
continue;
|
||
}
|
||
|
||
string fName = fileNames[fIdx].ToString();
|
||
if (fName == "") continue;
|
||
if (!hasDcImagePath && !hasAxpAttachCol)
|
||
fName = recId + "-" + fileNames[fIdx].ToString();
|
||
if (strFiles.ToString() == string.Empty)
|
||
strFiles.Append(fName);
|
||
else
|
||
strFiles.Append("," + fName);
|
||
|
||
CopyFiles(sourceFilePath, destFilePath, fileNames[fIdx], fName);
|
||
}
|
||
}
|
||
}
|
||
if (axpGrAttPath != string.Empty && Directory.Exists(axpGrAttPath))
|
||
{
|
||
try
|
||
{
|
||
Directory.Delete(axpGrAttPath, true);
|
||
}
|
||
catch { }
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
string attDelPath = "";
|
||
if (attWantToDelete.Count > 0)//Delete and add same file in another row
|
||
{
|
||
attDelFileCount += attWantToDelete.Count;
|
||
foreach (string wtdFile in attWantToDelete)
|
||
{
|
||
string attFName = wtdFile.Split('\\').Last();
|
||
attDelPath = wtdFile;
|
||
attDelPath = attDelPath.Replace("\\" + attFName, "");
|
||
try
|
||
{
|
||
File.Delete(wtdFile);
|
||
}
|
||
catch (Exception ex) { }
|
||
}
|
||
}
|
||
|
||
|
||
if (changedRows != string.Empty || delRows != string.Empty)//Delete any file or load record and delete file
|
||
{
|
||
int delFcnt = DeleteGridAttachments(delRows, recId, grdAttPath, transid, isAxpAttachFld, fldName, attFldNames, attDestPath, strFiles, isRecordFile);
|
||
//attDelPath = attDelPath == "" ? attDestPath[0].ToString() : attDelPath;
|
||
if (attDelPath == "" && attDestPath.Count > 0)
|
||
attDelPath = attDestPath[0].ToString();
|
||
if (delFcnt != 0)
|
||
attDelFileCount += delFcnt;
|
||
}
|
||
if (attDelPath != "" && attDelFileCount != 0)
|
||
{
|
||
AttDelLogFile(attDelPath, recId, attTotalFileCount, attSavedFileCount, attDelFileCount);
|
||
}
|
||
|
||
}
|
||
return saveResult;
|
||
}
|
||
|
||
private void AttDelLogFile(string attDelPath, string strRecId, int attTotalFileCount, int attSavedFileCount, int attDelFileCount)
|
||
{
|
||
// Total uploaded files: , Saved files: and deleted files :
|
||
// Log file recid-attdetails.txt
|
||
try
|
||
{
|
||
if (attDelPath != "")
|
||
{
|
||
//attTotalFileCount
|
||
//string attFName = attDelPath.Split('\\').Last();
|
||
//attDelPath = attDelPath.Replace("\\" + attFName, "");
|
||
attDelPath = attDelPath + "\\Temp";
|
||
DirectoryInfo diDel = new DirectoryInfo(attDelPath);
|
||
if (!diDel.Exists)
|
||
diDel.Create();
|
||
string attFPath = diDel + "\\" + strRecId + "-attdetails.txt";
|
||
StreamWriter sw = default(StreamWriter);
|
||
if (File.Exists(attFPath))
|
||
{
|
||
sw = new StreamWriter(attFPath, true);
|
||
sw.WriteLine("********** {0} **********", DateTime.Now.ToString());
|
||
sw.Flush();
|
||
sw.Close();
|
||
sw = new StreamWriter(attFPath, true);
|
||
}
|
||
else
|
||
{
|
||
sw = new StreamWriter(attFPath, false);
|
||
sw.WriteLine("********** {0} **********", DateTime.Now.ToString());
|
||
sw.Flush();
|
||
sw.Close();
|
||
sw = new StreamWriter(attFPath, true);
|
||
}
|
||
string text = "Total uploaded files:" + attTotalFileCount + " , saved files:" + attSavedFileCount + " and deleted files :" + attDelFileCount;
|
||
sw.WriteLine(text);
|
||
sw.Flush();
|
||
sw.Close();
|
||
}
|
||
}
|
||
catch (Exception exs) { }
|
||
}
|
||
|
||
public string GetFilesforSave(string referredFiles)
|
||
{
|
||
string nonReferredFiles = referredFiles;
|
||
return nonReferredFiles;
|
||
|
||
string[] refFiles = referredFiles.Split(')');
|
||
|
||
if (refFiles.Length > 1 && refFiles[1] != string.Empty)
|
||
nonReferredFiles = refFiles[1];
|
||
else if (refFiles.Length > 1 && refFiles[1] == string.Empty)
|
||
nonReferredFiles = string.Empty;
|
||
|
||
return nonReferredFiles;
|
||
}
|
||
//Get dc_imagepath field value
|
||
public string GetdcImagePath(string dcImagePath)
|
||
{
|
||
string grdAttPath = GetImgServerPath();
|
||
|
||
if (dcImagePath != string.Empty && dcImagePath.Contains(":"))
|
||
{
|
||
grdAttPath = dcImagePath;
|
||
}
|
||
else if (grdAttPath != string.Empty)
|
||
{
|
||
grdAttPath = grdAttPath + "\\" + dcImagePath;
|
||
|
||
}
|
||
else if (dcImagePath == string.Empty)
|
||
{
|
||
string errorLog = string.Empty;
|
||
string errMessage = "Value for dc_imagepath field is not specified";
|
||
errorLog = logobj.CreateLog("Error in loading Grid attachments - " + errMessage, sessionid, "GridAttachments", "new");
|
||
grdAttPath = string.Empty;
|
||
}
|
||
|
||
return grdAttPath;
|
||
}
|
||
|
||
public void GetGlobalAttachPath()
|
||
{
|
||
bool isLocalFolder = false, isOnlyFolder = false;
|
||
bool isRemoteFolder = false;
|
||
string imagePath = string.Empty;
|
||
string imageServer = string.Empty;
|
||
string grdAttPath = string.Empty;
|
||
string errorMessage = string.Empty;
|
||
string mapUsername = string.Empty;
|
||
string mapPassword = string.Empty;
|
||
|
||
if (HttpContext.Current.Session["AxpImageServerGbl"] != null)
|
||
{
|
||
imageServer = HttpContext.Current.Session["AxpImageServerGbl"].ToString();
|
||
imageServer = imageServer.Replace(";bkslh", @"\");
|
||
}
|
||
if (HttpContext.Current.Session["AxpImagePathGbl"] != null)
|
||
{
|
||
imagePath = HttpContext.Current.Session["AxpImagePathGbl"].ToString();
|
||
imagePath = imagePath.Replace(";bkslh", @"\");
|
||
|
||
if (imagePath.IndexOf(":") > -1)
|
||
isLocalFolder = true;
|
||
else
|
||
if (imagePath.IndexOf(@"\") > -1)
|
||
isRemoteFolder = true;
|
||
else
|
||
isOnlyFolder = true;
|
||
}
|
||
|
||
if (imagePath != string.Empty)
|
||
{
|
||
if (isLocalFolder || isRemoteFolder)
|
||
grdAttPath = imagePath;
|
||
else
|
||
grdAttPath = imageServer + @"\" + imagePath;
|
||
}
|
||
else if (imageServer != string.Empty)
|
||
{
|
||
grdAttPath = imageServer;
|
||
}
|
||
else
|
||
//If the global variables AxpimageServer and AxpImagePath is not defined
|
||
{
|
||
|
||
if (HttpContext.Current.Session["AxGridAttachPath"] != null)
|
||
{
|
||
grdAttPath = HttpContext.Current.Session["AxGridAttachPath"].ToString();
|
||
//CommonDir directory creation taken back due to application server memory usage.
|
||
//if (!grdAttPath.Contains(":\\"))
|
||
//{
|
||
// // ftp server path
|
||
// if (!grdAttPath.Contains("\\\\"))
|
||
// {
|
||
// grdAttPath = AppDomain.CurrentDomain.BaseDirectory + "CommonDir\\" + grdAttPath;
|
||
// if (!Directory.Exists(grdAttPath))
|
||
// {
|
||
// Directory.CreateDirectory(grdAttPath);
|
||
// }
|
||
// }
|
||
//}
|
||
}
|
||
}
|
||
HttpContext.Current.Session["grdAttPath"] = grdAttPath;
|
||
}
|
||
|
||
private int DeleteGridAttachments(string delRows, string recId, string grdAttPath, string transId, bool isAxpAttachFld, string fld, ArrayList attFldNames, ArrayList attDestPath, StringBuilder attFileNames, ArrayList isRecordFile)
|
||
{
|
||
int DelfCnt = 0;
|
||
try
|
||
{
|
||
for (int i = 0; i < attDestPath.Count; i++)
|
||
{
|
||
//abc.txt,xyz.txt,
|
||
string isRecFile = isRecordFile[i].ToString();
|
||
string attFiles = attFileNames.ToString() + ",";
|
||
DirectoryInfo di = new DirectoryInfo(attDestPath[i].ToString());
|
||
if (di.Exists)
|
||
{
|
||
FileInfo[] files = isRecFile == "true" ? di.GetFiles(recId + "-*") : di.GetFiles();
|
||
for (int j = 0; j < files.Length; j++)
|
||
{
|
||
FileInfo file = (FileInfo)files[j];
|
||
string strFileName = file.Name + ",";
|
||
if (attFiles.IndexOf(strFileName) == -1 && (file.Name).IndexOf(recId) != -1)
|
||
{
|
||
file.Delete();
|
||
DelfCnt++;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
logobj.CreateLog("Error while deleting-" + ex.Message, sessionid, "DeleteGridAttachments", "new");
|
||
}
|
||
return DelfCnt;
|
||
}
|
||
|
||
//For deleting nongrid attachment files from file server
|
||
private void DeleteNonGridAttachments(string recId, string grdAttPath, string transId, string fieldName, ArrayList attFldNames, ArrayList nonGridAttDestPath, StringBuilder attFileNames)
|
||
{
|
||
try
|
||
{
|
||
for (int i = 0; i < nonGridAttDestPath.Count; i++)
|
||
{
|
||
//abc.txt,xyz.txt,
|
||
string attFiles = attFileNames.ToString() + ",";
|
||
DirectoryInfo di = new DirectoryInfo(nonGridAttDestPath[i].ToString());
|
||
if (di.Exists)
|
||
{
|
||
FileInfo[] files = di.GetFiles();
|
||
for (int j = 0; j < files.Length; j++)
|
||
{
|
||
FileInfo file = (FileInfo)files[j];
|
||
string strFileName = file.Name + ",";
|
||
if (attFiles.IndexOf(strFileName) == -1 && (file.Name).IndexOf(recId) != -1)
|
||
file.Delete();
|
||
|
||
}
|
||
}
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
logobj.CreateLog("Error while deleting-" + ex.Message, sessionid, "DeleteGridAttachments", "new");
|
||
}
|
||
}
|
||
|
||
//Function to save the image in the server folder if the image starts with fld_ddo
|
||
private void SaveImageToFolder(TStructDef strObj, string transid, string sid, string recId, ArrayList deletedFldArrayValues)
|
||
{
|
||
|
||
bool deletedGridFilesExist = false;
|
||
|
||
if (recId != "0")
|
||
{
|
||
|
||
foreach (var imgFld in tstStrObj.AxImageFields)
|
||
{
|
||
int idx = tstStrObj.GetFieldIndex(imgFld.ToString());
|
||
TStructDef.FieldStruct fld = (TStructDef.FieldStruct)strObj.flds[idx];
|
||
TStructDef.DcStruct dc = (TStructDef.DcStruct)tstStrObj.dcs[fld.fldframeno - 1];
|
||
DataTable dcTable = dsDataSet.Tables["dc" + dc.frameno];
|
||
|
||
if (fld.fieldIsImage)
|
||
{
|
||
if (!IsDcGrid(fld.fldframeno.ToString(), strObj))
|
||
{
|
||
|
||
string value = string.Empty, destValue = string.Empty;
|
||
ArrayList nonGridAttDestPath = new ArrayList();
|
||
ArrayList attFldNames = new ArrayList();
|
||
StringBuilder nonGrdStrFiles = new StringBuilder();
|
||
destValue = value = GetFieldValue(fld.fldframeno.ToString(), fld.name);
|
||
if (value == string.Empty && (fld.name.StartsWith("dc" + fld.fldframeno + "_image") || fld.name.StartsWith("axp_nga_")))
|
||
{
|
||
try
|
||
{
|
||
DataTable oldDcTable = dsDataSet.Tables["dc_old" + fld.fldframeno];
|
||
if (dsDataSet.Tables["dc_old" + fld.fldframeno].Rows[0]["old__" + fld.name].ToString() != string.Empty)
|
||
{
|
||
deletedGridFilesExist = true;
|
||
}
|
||
}
|
||
catch (Exception ex) { }
|
||
}
|
||
if (value != string.Empty || deletedGridFilesExist)
|
||
{
|
||
|
||
string fieldName = fld.name;//fieldControlName[index].ToString();
|
||
string strFile = "";
|
||
if (!(fieldName.StartsWith("axp_nga_")))
|
||
{
|
||
strFile = scriptsPath + "axpert\\" + sid + "\\" + fieldName;
|
||
if (!File.Exists(strFile + "\\" + value))
|
||
{
|
||
string strFileNew = scriptsPath + "axpert\\" + sid;
|
||
if (File.Exists(strFileNew + "\\" + value))
|
||
strFile = strFileNew;
|
||
}
|
||
|
||
string strDest = "";
|
||
if (imgAttachPath != "")
|
||
{
|
||
string imgName = destValue.Substring(0, destValue.LastIndexOf('.'));
|
||
destValue = destValue.Replace(imgName, recId);
|
||
//strDest = imgAttachPath + "\\axpert\\" + transid + "\\" + recId + "\\" + fieldName;
|
||
strDest = imgAttachPath + "\\" + transid + "\\" + fieldName;
|
||
}
|
||
else
|
||
{
|
||
//strDest = scriptsPath + "axpert\\" + transid + "\\" + recId + "\\" + fieldName;
|
||
strDest = scriptsPath + "axpert\\" + transid + "\\" + fieldName;
|
||
}
|
||
|
||
//loop to check if multiple images exist for same field, if yes then delete all.
|
||
string authenticationStatus = string.Empty;
|
||
if (util.GetAuthentication(ref authenticationStatus))
|
||
{
|
||
DirectoryInfo di = new DirectoryInfo(strDest);
|
||
if (!di.Exists)
|
||
{
|
||
di.Create();
|
||
}
|
||
else if (imgAttachPath == "")
|
||
{
|
||
FileInfo[] files = di.GetFiles();
|
||
for (int j = 0; j < files.Length; j++)
|
||
{
|
||
FileInfo file = (FileInfo)files[j];
|
||
file.Delete();
|
||
}
|
||
}
|
||
else if (imgAttachPath != "")
|
||
{
|
||
FileInfo[] files = di.GetFiles();
|
||
if (files.Length > 0)
|
||
{
|
||
var ImgExist = files.Where(x => x.Name.Split('.')[0] == recId).ToList();
|
||
if (ImgExist.Count > 0)
|
||
{
|
||
foreach (var lstImg in ImgExist)
|
||
{
|
||
FileInfo file = (FileInfo)lstImg;
|
||
file.Delete();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if (value != string.Empty || deletedGridFilesExist)
|
||
{
|
||
CopyFiles(strFile, strDest, value, destValue);
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
|
||
//strFile = scriptsPath + "axpert\\" + sid + "\\" + fieldName;
|
||
strFile = scriptsPath + "axpert\\" + sid;
|
||
if (!File.Exists(strFile + "\\" + value))
|
||
{
|
||
string strFileNew = scriptsPath + "axpert\\" + sid;
|
||
if (File.Exists(strFileNew + "\\" + value))
|
||
strFile = strFileNew;
|
||
}
|
||
|
||
string strDest = "";
|
||
if (imgAttachPath != "" && !(deletedGridFilesExist))
|
||
{
|
||
string imgName = destValue.Substring(0, destValue.LastIndexOf('.'));
|
||
destValue = destValue.Replace(imgName, recId);
|
||
//strDest = imgAttachPath + "\\axpert\\" + transid + "\\" + recId + "\\" + fieldName;
|
||
strDest = imgAttachPath + "\\" + transid + "\\" + fieldName;
|
||
}
|
||
else if (!deletedGridFilesExist)
|
||
{
|
||
//strDest = scriptsPath + "axpert\\" + transid + "\\" + recId + "\\" + fieldName;
|
||
strDest = scriptsPath + "axpert\\" + transid + "\\" + fieldName;
|
||
}
|
||
else
|
||
{
|
||
strDest = imgAttachPath + "\\" + transid + "\\" + fieldName;
|
||
}
|
||
|
||
//loop to check if multiple images exist for same field, if yes then delete all.
|
||
string authenticationStatus = string.Empty;
|
||
if (util.GetAuthentication(ref authenticationStatus))
|
||
{
|
||
DirectoryInfo di = new DirectoryInfo(strDest);
|
||
if (!di.Exists)
|
||
{
|
||
di.Create();
|
||
}
|
||
else if (imgAttachPath == "")
|
||
{
|
||
FileInfo[] files = di.GetFiles();
|
||
for (int j = 0; j < files.Length; j++)
|
||
{
|
||
FileInfo file = (FileInfo)files[j];
|
||
file.Delete();
|
||
}
|
||
}
|
||
else if (imgAttachPath != "")
|
||
{
|
||
FileInfo[] files = di.GetFiles();
|
||
if (files.Length > 0)
|
||
{
|
||
var ImgExist = files.Where(x => x.Name.Split('.')[0] == recId).ToList();
|
||
if (ImgExist.Count > 0)
|
||
{
|
||
foreach (var lstImg in ImgExist)
|
||
{
|
||
FileInfo file = (FileInfo)lstImg;
|
||
file.Delete();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if (value != string.Empty || deletedGridFilesExist)
|
||
{
|
||
string[] fileNames = value.Split(',');
|
||
nonGridAttDestPath.Add(strDest);
|
||
attFldNames.Add(fieldName);
|
||
for (int fIdx = 0; fIdx < fileNames.Length; fIdx++)
|
||
{
|
||
string fName = fileNames[fIdx].ToString();
|
||
if (fName == "") continue;
|
||
fName = recId + "-" + fileNames[fIdx].ToString();
|
||
CopyFiles(strFile, strDest, fileNames[fIdx], fName);
|
||
if (nonGrdStrFiles.ToString() == string.Empty)
|
||
nonGrdStrFiles.Append(fName);
|
||
else
|
||
nonGrdStrFiles.Append("," + fName);
|
||
}
|
||
}
|
||
}
|
||
|
||
DeleteNonGridAttachments(recId, imgAttachPath, transid, fieldName, attFldNames, nonGridAttDestPath, nonGrdStrFiles);
|
||
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// Function to get a non grid field's value.
|
||
/// </summary>
|
||
/// <param name="dcNo"></param>
|
||
/// <param name="fldName"></param>
|
||
/// <returns></returns>
|
||
public string GetFieldValue(string dcNo, string fldName)
|
||
{
|
||
string fldValue = string.Empty;
|
||
DataTable dcTable = dsDataSet.Tables["dc" + dcNo];
|
||
if (dcTable.Rows.Count > 0)
|
||
{
|
||
try
|
||
{
|
||
fldValue = dcTable.Rows[0][fldName].ToString();
|
||
}
|
||
catch (Exception ex)
|
||
{ }
|
||
}
|
||
return fldValue;
|
||
}
|
||
|
||
public string DeleteImages(TStructData tstData, string recId, string fieldName)
|
||
{
|
||
string res = "";
|
||
transid = tstData.transid.ToString();
|
||
fieldName = fieldName.Substring(0, fieldName.LastIndexOf("F") - 3);
|
||
int index = fldNames.IndexOf(fieldName);
|
||
string fldFrameNo = GetFrameNo(fieldName);
|
||
string value = GetFieldValue(fldFrameNo, fieldName);
|
||
|
||
string strFile = "";
|
||
strFile = scriptsPath + "axpert\\" + sessionid;
|
||
|
||
string strDest = "", strDestNew = "";
|
||
if (imgAttachPath != "")
|
||
{
|
||
strDest = imgAttachPath + "\\axpert\\" + transid + "\\" + fldNames[index].ToString();
|
||
strDestNew = imgAttachPath + "\\" + transid + "\\" + fldNames[index].ToString();
|
||
}
|
||
else
|
||
{
|
||
strDest = scriptsPath + "axpert\\" + sessionid + "\\" + fldNames[index].ToString();
|
||
}
|
||
|
||
//loop to check if multiple images exist for same field, if yes then delete all.
|
||
DirectoryInfo di = new DirectoryInfo(strDestNew);
|
||
try
|
||
{
|
||
if (di.Exists)
|
||
{
|
||
FileInfo[] files = di.GetFiles();
|
||
for (int j = 0; j < files.Length; j++)
|
||
{
|
||
FileInfo file = (FileInfo)files[j];
|
||
string[] fileStr = file.Name.Split('-');
|
||
if (fileStr[0].ToString() == recId)
|
||
{
|
||
file.Delete();
|
||
}
|
||
}
|
||
}
|
||
DirectoryInfo diNew = new DirectoryInfo(strDest);
|
||
if (diNew.Exists)
|
||
{
|
||
FileInfo[] files = diNew.GetFiles();
|
||
for (int j = 0; j < files.Length; j++)
|
||
{
|
||
FileInfo file = (FileInfo)files[j];
|
||
string[] fileStr = file.Name.Split('-');
|
||
if (fileStr[0].ToString() == recId)
|
||
{
|
||
file.Delete();
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
res = ex.Message;
|
||
}
|
||
|
||
return res;
|
||
}
|
||
|
||
//Function to copy the image from the given source path to the destination path.
|
||
private void CopyFiles(string sourcePath, string destPath, string srcFileName, string desFileName)
|
||
{
|
||
string authenticationStatus = string.Empty;
|
||
if (util.GetAuthentication(ref authenticationStatus))
|
||
{
|
||
DirectoryInfo sPath = new DirectoryInfo(sourcePath);
|
||
DirectoryInfo dPath = new DirectoryInfo(destPath);
|
||
|
||
if (!dPath.Exists)
|
||
dPath.Create();
|
||
|
||
if (sPath.Exists)
|
||
{
|
||
BinaryReader brReader = default(BinaryReader);
|
||
BinaryWriter brWriter = default(BinaryWriter);
|
||
|
||
string strFile = sourcePath + "\\" + srcFileName;
|
||
string strDest = destPath + "\\" + desFileName;
|
||
FileStream input = null;
|
||
try
|
||
{
|
||
input = new FileStream(strFile, FileMode.Open, FileAccess.Read);
|
||
}
|
||
catch (FileNotFoundException ex)
|
||
{
|
||
|
||
}
|
||
if (input != null)
|
||
{
|
||
FileStream output = new FileStream(strDest, FileMode.Create, FileAccess.Write);
|
||
brReader = new System.IO.BinaryReader(input);
|
||
brWriter = new System.IO.BinaryWriter(output);
|
||
int bufsize = 30000;
|
||
// this is buffer size
|
||
int readcount = 0;
|
||
int bsize = 0;
|
||
|
||
int indexer = 0;
|
||
FileInfo fileInfo = new FileInfo(strFile);
|
||
|
||
int FileLen = Convert.ToInt32(fileInfo.Length);
|
||
while ((readcount < FileLen))
|
||
{
|
||
if (bufsize < FileLen - readcount)
|
||
{
|
||
bsize = bufsize;
|
||
}
|
||
else
|
||
{
|
||
bsize = FileLen - readcount;
|
||
}
|
||
byte[] buffer = new byte[bsize];
|
||
|
||
brReader.Read(buffer, indexer, bsize);
|
||
brWriter.Write(buffer, indexer, bsize);
|
||
|
||
readcount = readcount + bsize;
|
||
}
|
||
|
||
brReader.Close();
|
||
brWriter.Close();
|
||
brReader.Dispose();
|
||
brWriter.Dispose();
|
||
output.Dispose();
|
||
input.Dispose();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
#region GridAttachments
|
||
public void LoadGridAttsToFolder(string recId, string tid)
|
||
{
|
||
string destFilePath = scriptsPath + "axpert\\" + HttpContext.Current.Session["nsessionid"];
|
||
string srcFilePath = string.Empty;
|
||
string srcpathValue = string.Empty;
|
||
string grdAttPath = string.Empty;
|
||
//string schemaName = project;
|
||
grdAttPath = HttpContext.Current.Session["grdAttPath"].ToString();
|
||
string attachTid = GetAttachTransid();
|
||
|
||
ArrayList attFileNames = new ArrayList();
|
||
bool hasGridAttachFld = false;
|
||
foreach (var attFld in tstStrObj.AxAttachFields)
|
||
{
|
||
int idx = tstStrObj.GetFieldIndex(attFld.ToString());
|
||
TStructDef.FieldStruct fld = (TStructDef.FieldStruct)tstStrObj.flds[idx];
|
||
|
||
if ((fld.name.StartsWith("dc") && fld.name.ToLower().EndsWith("_imagepath")) && IsDcGrid(fld.fldframeno.ToString(), tstStrObj))
|
||
hasImagePath = true;
|
||
|
||
//If dc_referimages is defined for referring Attachments
|
||
if ((fld.name.StartsWith("dc") && fld.name.ToLower().EndsWith("_referimages")) && IsDcGrid(fld.fldframeno.ToString(), tstStrObj))
|
||
{
|
||
TStructDef.DcStruct dc1 = (TStructDef.DcStruct)tstStrObj.dcs[fld.fldframeno - 1];
|
||
|
||
DataTable dcTable1 = dsDataSet.Tables["dc" + dc1.frameno];
|
||
|
||
string refVal1 = string.Empty;
|
||
for (int k = 0; k < dcTable1.Rows.Count; k++)
|
||
{
|
||
if (string.IsNullOrEmpty(Convert.ToString(dcTable1.Rows[k]["dc" + dc1.frameno + "_referimages"])))
|
||
refVal1 = dcTable1.Rows[k]["dc" + dc1.frameno + "_referimages"].ToString();
|
||
GetReferedFiles(refVal1, hasImagePath);
|
||
}
|
||
|
||
}
|
||
if (((fld.name.StartsWith("axp_gridattach_")) || (fld.name.StartsWith("dc") && fld.name.ToLower().EndsWith("_image"))) && !(fld.name.StartsWith("axp_nga_")) && IsDcGrid(fld.fldframeno.ToString(), tstStrObj))
|
||
{
|
||
TStructDef.DcStruct dc = (TStructDef.DcStruct)tstStrObj.dcs[fld.fldframeno - 1];
|
||
if (dc.DCHasDataRows)
|
||
{
|
||
if (!(fld.name.StartsWith("axp_gridattach_")))
|
||
srcFilePath = grdAttPath + "\\" + attachTid + "\\" + fld.name;
|
||
//srcFilePath = grdAttPath + "\\" + schemaName + "\\" + attachTid + "\\" + fld.name;
|
||
else
|
||
{
|
||
hasGridAttachFld = true;
|
||
srcFilePath = grdAttPath + "\\" + attachTid + "\\" + recId + "\\" + fld.name;
|
||
//srcFilePath = grdAttPath + "\\" + schemaName + "\\" + attachTid + "\\" + recId + "\\" + fld.name;
|
||
}
|
||
|
||
string value = string.Empty;
|
||
DataTable dcTable = dsDataSet.Tables["dc" + dc.frameno];
|
||
string sfileEx = string.Empty;
|
||
|
||
for (int j = 0; j < dcTable.Rows.Count; j++)
|
||
{
|
||
attFileNames.Clear();
|
||
value = dcTable.Rows[j][fld.name].ToString();
|
||
string[] attFiles;
|
||
if (value != "")
|
||
sfileEx = value.Substring(value.LastIndexOf("."));
|
||
//If axpattach_filename is defined
|
||
if (dcTable.Columns.Contains("axpattach_filename" + dc.frameno))
|
||
{
|
||
if (value != string.Empty)
|
||
if (dcTable.Rows[j]["axpattach_filename" + dc.frameno].ToString() != string.Empty)
|
||
value = dcTable.Rows[j]["axpattach_filename" + dc.frameno].ToString() + sfileEx;
|
||
}
|
||
//If dc_imagepath is defined
|
||
if (dcTable.Columns.Contains("dc" + dc.frameno + "_imagepath"))
|
||
{
|
||
srcFilePath = GetdcImagePath(dcTable.Rows[j]["dc" + dc.frameno + "_imagepath"].ToString());
|
||
|
||
}
|
||
//If dc_image field is referring attachments
|
||
if (value.Contains("@"))
|
||
{
|
||
GetReferedFiles(value, hasImagePath);
|
||
}
|
||
if (value.Contains(","))
|
||
{
|
||
attFiles = value.Split(',');
|
||
for (int attCount = 0; attCount < attFiles.Length; attCount++)
|
||
attFileNames.Add(recId + "-" + attFiles[attCount]);
|
||
}
|
||
else
|
||
attFileNames.Add(recId + "-" + value);
|
||
|
||
LoadFilefromFolder(srcFilePath, destFilePath, attFileNames, recId);
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
//If no DataRows are there, and the Tstruct is referring attachments through dc_image field
|
||
if (fld.name.StartsWith("dc") && fld.name.ToLower().EndsWith("_image"))
|
||
{
|
||
DataTable dcTableRef = dsDataSet.Tables["dc" + dc.frameno];
|
||
for (int j = 0; j < dcTableRef.Rows.Count; j++)
|
||
{
|
||
string dcrefVal1 = dcTableRef.Rows[j]["dc" + dc.frameno + "_image"].ToString();
|
||
if (dcrefVal1.Contains("@"))
|
||
{
|
||
GetReferedFiles(dcrefVal1, hasImagePath);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
else if (fld.name.StartsWith("axp_nga_"))
|
||
{
|
||
sessionid = HttpContext.Current.Session["nsessionid"].ToString();
|
||
TStructDef.DcStruct dc = (TStructDef.DcStruct)tstStrObj.dcs[fld.fldframeno - 1];
|
||
DataTable dcTable = dsDataSet.Tables["dc" + dc.frameno];
|
||
if (dcTable != null && dcTable.Rows.Count > 0)
|
||
{
|
||
string value = dcTable.Rows[0][fld.name].ToString();
|
||
string[] attFiles;
|
||
attFileNames.Clear();
|
||
if (value.Contains(","))
|
||
{
|
||
attFiles = value.Split(',');
|
||
for (int attCount = 0; attCount < attFiles.Length; attCount++)
|
||
attFileNames.Add(recId + "-" + attFiles[attCount]);
|
||
}
|
||
else
|
||
attFileNames.Add(recId + "-" + value);
|
||
string scrPath = scriptsPath + "axpert\\" + sessionid;
|
||
string desFilePath = "", desFilePathOld = "";
|
||
if (imgAttachPath != "")
|
||
{
|
||
desFilePathOld = imgAttachPath + "\\axpert\\" + transID + "\\" + recId + "\\" + fld.name;
|
||
desFilePath = imgAttachPath + "\\" + transID + "\\" + fld.name;
|
||
}
|
||
else
|
||
{
|
||
desFilePath = scriptsPath + "axpert\\" + transID + "\\" + fld.name;
|
||
}
|
||
string authenticationStatus = string.Empty;
|
||
if (util.GetAuthentication(ref authenticationStatus))
|
||
{
|
||
DirectoryInfo di = new DirectoryInfo(desFilePath);
|
||
if (!di.Exists)
|
||
di.Create();
|
||
|
||
FileInfo[] fileEntries = di.GetFiles();
|
||
//TODO: since the loop is breaking after the first loop, the i need not be incremented
|
||
for (int k = 0; k < fileEntries.Length; k++)
|
||
{
|
||
FileInfo file = (FileInfo)fileEntries[k];
|
||
string imgName = file.Name.Substring(0, 13);
|
||
if (imgName == recId)
|
||
{
|
||
string destValue = file.Name.Replace(imgName, recId);
|
||
if (File.Exists(desFilePath + "\\" + destValue))
|
||
{
|
||
imageFldSrc.Add(scrPath + "axpert\\" + sessionid + "\\" + destValue);
|
||
LoadFilefromFolder(desFilePath, scrPath, attFileNames, recId);
|
||
}
|
||
else
|
||
{
|
||
DirectoryInfo diOld = new DirectoryInfo(desFilePathOld);
|
||
if (diOld.Exists)
|
||
{
|
||
FileInfo[] fileEntriesOld = diOld.GetFiles();
|
||
//TODO: since the loop is breaking after the first loop, the i need not be incremented
|
||
for (int j = 0; j < fileEntriesOld.Length; j++)
|
||
{
|
||
FileInfo fileOld = (FileInfo)fileEntriesOld[j];
|
||
imageFldSrc.Add(scrPath + "axpert\\" + sessionid + "\\" + fileOld.Name);
|
||
LoadFilefromFolder(desFilePath, scrPath, attFileNames, recId);
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
private string GetImgServerPath()
|
||
{
|
||
|
||
string grdAttPath = string.Empty;
|
||
string imageServer = string.Empty;
|
||
|
||
if (HttpContext.Current.Session["AxpImageServerGbl"] != null)
|
||
{
|
||
imageServer = HttpContext.Current.Session["AxpImageServerGbl"].ToString();
|
||
imageServer = imageServer.Replace(";bkslh", @"\");
|
||
}
|
||
|
||
return imageServer;
|
||
}
|
||
private void LoadFilefromFolder(string fPath, string destFilePath, ArrayList attFileNames, string recId)
|
||
{
|
||
if (fPath != string.Empty)
|
||
{
|
||
DirectoryInfo di = new DirectoryInfo(fPath);
|
||
if (!di.Exists)
|
||
di.Create();
|
||
foreach (string fileName in attFileNames)
|
||
{
|
||
bool isFileCopied = false;
|
||
FileInfo[] fileEntries = di.GetFiles(fileName);
|
||
if (fileEntries != null && fileEntries.Length > 0)
|
||
{
|
||
FileInfo file = (FileInfo)fileEntries[0];
|
||
string[] fileVal = file.Name.Split(new[] { '-' }, 2);
|
||
|
||
if (attFileNames.IndexOf(file.Name) != -1 && fileVal.Length > 1)
|
||
{
|
||
CopyFiles(fPath, destFilePath, file.Name, fileVal[1].ToString());
|
||
}
|
||
else
|
||
CopyFiles(fPath, destFilePath, file.Name, file.Name);
|
||
isFileCopied = true;
|
||
}
|
||
else
|
||
{
|
||
string[] fileVal = fileName.Split(new[] { '-' }, 2);
|
||
string worFlname = string.Empty;
|
||
if (fileVal.Length > 1 && fileVal[0] == recId)
|
||
worFlname = fileVal[1].ToString();
|
||
else
|
||
worFlname = fileName;
|
||
FileInfo[] fileEntrie = di.GetFiles(worFlname);
|
||
if (fileEntrie != null && fileEntrie.Length > 0)
|
||
{
|
||
FileInfo file = (FileInfo)fileEntrie[0];
|
||
CopyFiles(fPath, destFilePath, file.Name, file.Name);
|
||
isFileCopied = true;
|
||
}
|
||
}
|
||
if (isFileCopied == false)
|
||
{
|
||
string[] fileVal = fileName.Split(new[] { '-' }, 2);
|
||
string neFlname = string.Empty;
|
||
if (fileVal.Length > 1 && fileVal[0] == recId)
|
||
neFlname = fileVal[1].ToString();
|
||
else
|
||
neFlname = fileName;
|
||
AxGridAttNotExistList.Add(neFlname);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
private void GetReferedFiles(string dcfldValue, bool hasImagePath)
|
||
{
|
||
string destPath = scriptsPath + "axpert\\" + HttpContext.Current.Session["nsessionid"];
|
||
string fldValue = string.Empty;
|
||
string folderPath = string.Empty;
|
||
string destFname = string.Empty;
|
||
string grdAttPath = string.Empty;
|
||
string referRecid = string.Empty;
|
||
string referfNames = string.Empty;
|
||
string[] referfNameOnebyOne;
|
||
try
|
||
{
|
||
string[] fldValues = dcfldValue.Split('@');
|
||
if (hasImagePath)
|
||
{
|
||
grdAttPath = GetImgServerPath();
|
||
for (int i = 0; i < fldValues.Length; i++)
|
||
{
|
||
//Eg:{@India\BLR\license.txt,release.txt}
|
||
|
||
if (fldValues[i] != string.Empty)
|
||
{
|
||
string[] fValues = fldValues[i].Split('(');
|
||
for (int indx = 0; indx < fValues.Length; indx++)
|
||
{
|
||
if (fValues[indx].ToString() != String.Empty)
|
||
{
|
||
string[] fvalue = fValues[indx].Split(',');
|
||
}
|
||
}
|
||
folderPath = fldValues[i].Substring(0, fldValues[i].LastIndexOf("\\"));
|
||
referfNames = fldValues[i].Substring(fldValues[i].LastIndexOf("\\") + 1);
|
||
if (hasImagePath)
|
||
grdAttPath = grdAttPath + "\\" + folderPath;
|
||
}
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
//Eg : {@MyDocs\transid\fieldname,recordid(filename1,f2,f3)}
|
||
|
||
grdAttPath = HttpContext.Current.Session["grdAttPath"].ToString();
|
||
|
||
fldValue = dcfldValue.Substring(1, dcfldValue.Length - 1);
|
||
fldValues = fldValue.Split(new[] { ',' }, 2);
|
||
if (fldValues.Length > 1)
|
||
{
|
||
grdAttPath += "\\" + fldValues[0].ToString();
|
||
int nFileSIndex = fldValues[1].IndexOf("(");
|
||
int nFileEIndex = fldValues[1].IndexOf(")") - 1;
|
||
|
||
referfNames = fldValues[1].Substring(nFileSIndex + 1, nFileEIndex - nFileSIndex);
|
||
referRecid = fldValues[1].Substring(0, nFileSIndex);
|
||
}
|
||
|
||
}
|
||
//Copying Files to Session folder
|
||
referfNameOnebyOne = referfNames.Split(',');
|
||
for (int k = 0; k < referfNameOnebyOne.Length; k++)
|
||
{
|
||
if (referfNameOnebyOne[k] != "")
|
||
if (hasImagePath)
|
||
CopyFiles(grdAttPath, destPath, referfNameOnebyOne[k], referfNameOnebyOne[k]);
|
||
else
|
||
{
|
||
destFname = referRecid + "-" + referfNameOnebyOne[k];
|
||
CopyFiles(grdAttPath, destPath, destFname, destFname);
|
||
}
|
||
}
|
||
|
||
|
||
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
}
|
||
}
|
||
|
||
#endregion
|
||
//Function to check all images for the given record id and copy them to scripts folder.
|
||
private void LoadImageToFolder(string fldName, string recId)
|
||
{
|
||
string tmpFldName = fldName;//.Substring(0, fldName.LastIndexOf("F") - 3);
|
||
if (recId != "0")
|
||
{
|
||
sessionid = HttpContext.Current.Session["nsessionid"].ToString();
|
||
//scriptsPath += "axpert\\" + sessionid + "\\" + fldName;
|
||
string scrPath = scriptsPath + "axpert\\" + sessionid + "\\" + fldName;
|
||
string desFilePath = "", desFilePathOld = "";
|
||
if (imgAttachPath != "")
|
||
{
|
||
desFilePathOld = imgAttachPath + "\\axpert\\" + transID + "\\" + recId + "\\" + fldName;
|
||
desFilePath = imgAttachPath + "\\" + transID + "\\" + fldName;
|
||
}
|
||
else
|
||
{
|
||
desFilePath = scriptsPath + "axpert\\" + transID + "\\" + fldName;
|
||
//desFilePath = scriptsPath + "axpert\\" + transID + "\\" + recId + "\\" + fldName;
|
||
}
|
||
string authenticationStatus = string.Empty;
|
||
if (util.GetAuthentication(ref authenticationStatus))
|
||
{
|
||
DirectoryInfo di = new DirectoryInfo(desFilePath);
|
||
if (!di.Exists)
|
||
di.Create();
|
||
|
||
FileInfo[] fileEntries = di.GetFiles();
|
||
//TODO: since the loop is breaking after the first loop, the i need not be incremented
|
||
for (int i = 0; i < fileEntries.Length; i++)
|
||
{
|
||
FileInfo file = (FileInfo)fileEntries[i];
|
||
//imageFldNames.Add(fldName);
|
||
string imgName = file.Name.Substring(0, file.Name.LastIndexOf('.'));
|
||
if (imgName == recId)
|
||
{
|
||
imageFldNames.Add(fldName);
|
||
string destValue = file.Name.Replace(imgName, recId);
|
||
if (File.Exists(desFilePath + "\\" + destValue))
|
||
{
|
||
imageFldSrc.Add(scriptsPath + "axpert\\" + sessionid + "\\" + destValue);
|
||
CopyFiles(desFilePath, scrPath, destValue, destValue);
|
||
}
|
||
else
|
||
{
|
||
DirectoryInfo diOld = new DirectoryInfo(desFilePathOld);
|
||
if (diOld.Exists)
|
||
{
|
||
FileInfo[] fileEntriesOld = diOld.GetFiles();
|
||
//TODO: since the loop is breaking after the first loop, the i need not be incremented
|
||
for (int j = 0; j < fileEntriesOld.Length; j++)
|
||
{
|
||
FileInfo fileOld = (FileInfo)fileEntriesOld[j];
|
||
imageFldNames.Add(fldName);
|
||
imageFldSrc.Add(scriptsPath + "axpert\\" + sessionid + "\\" + fileOld.Name);
|
||
CopyFiles(desFilePathOld, scrPath, fileOld.Name, fileOld.Name);
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
//Get the row numbers for the given dc no from the field array
|
||
private ArrayList GetGridRowsFromArray(string frmNo)
|
||
{
|
||
ArrayList gridRows = new ArrayList();
|
||
for (int k = 0; k < fieldControlName.Count; k++)
|
||
{
|
||
int fIndx = 0;
|
||
fIndx = fieldControlName[k].ToString().LastIndexOf("F");
|
||
string frameNo = fieldControlName[k].ToString().Substring(fIndx + 1);
|
||
string rowNo = fieldControlName[k].ToString().Substring(fIndx - 3, 3);
|
||
if (frameNo == frmNo)
|
||
{
|
||
int index = -1;
|
||
index = gridRows.IndexOf(rowNo);
|
||
if (index == -1)
|
||
gridRows.Add(rowNo);
|
||
}
|
||
}
|
||
return gridRows;
|
||
}
|
||
|
||
//Function to get the concatenated string of parent field values in the pop grid dc.
|
||
private string GetParentValues(string[] popParentFlds, string rowNo, string frmNo)
|
||
{
|
||
return DSGetParentValues(popParentFlds, rowNo, frmNo);
|
||
}
|
||
|
||
//Function to get the concatenated string of parent field values in the pop grid dc.
|
||
private string DSGetParentValues(string[] popParentFlds, string rowNo, string frmNo)
|
||
{
|
||
string parFldVals = "";
|
||
for (int j = 0; j < popParentFlds.Length; j++)
|
||
{
|
||
double fldNumber;
|
||
string popFielsName = "sub" + frmNo + "_" + popParentFlds[j].Trim();
|
||
string popFldValue = string.Empty;
|
||
if (DSGetRow(rowNo, Convert.ToInt32(frmNo)).Table.Columns.Contains(popFielsName))
|
||
popFldValue = DSGetRow(rowNo, Convert.ToInt32(frmNo))[popFielsName].ToString();
|
||
else
|
||
{
|
||
popFielsName = "Sub" + frmNo + "_" + popParentFlds[j].Trim();
|
||
popFldValue = DSGetRow(rowNo, Convert.ToInt32(frmNo))[popFielsName].ToString();
|
||
}
|
||
|
||
bool isNumber = double.TryParse(popFldValue, out fldNumber);
|
||
if (isNumber == true)
|
||
{
|
||
double popVal = double.Parse(popFldValue);
|
||
parFldVals += popVal.ToString();
|
||
}
|
||
else
|
||
{
|
||
parFldVals += popFldValue;
|
||
}
|
||
}
|
||
return parFldVals;
|
||
}
|
||
|
||
public DataRow DSGetRow(string rowNo, int dcNo)
|
||
{
|
||
if (dcNo == 0) return null;
|
||
DataTable dt = dsDataSet.Tables["dc" + dcNo];
|
||
int rNo = Convert.ToInt32(rowNo);
|
||
if (rNo == 0) rNo = 1;
|
||
return dt.Rows.Find(rNo);
|
||
}
|
||
|
||
public DataRow DsGetRow(string fldName, string rowNo)
|
||
{
|
||
return DSGetRow(rowNo, tstStrObj.GetFieldDc(fldName));
|
||
}
|
||
|
||
|
||
public void GetKeyColValues(int dcNo, ArrayList arrKeyCols, ArrayList keyRowNos)
|
||
{
|
||
DSGetKeyColValues(dcNo, arrKeyCols, keyRowNos);
|
||
}
|
||
|
||
private void DSGetKeyColValues(int dcNo, ArrayList arrKeyCols, ArrayList arrKeyRowNos)
|
||
{
|
||
DataTable dt = dsDataSet.Tables["dc" + dcNo];
|
||
foreach (DataRow dr in dt.Rows)
|
||
{
|
||
string keyValue = string.Empty;
|
||
string keyRow = string.Empty;
|
||
TStructDef.DcStruct dc = (TStructDef.DcStruct)tstStrObj.dcs[dcNo - 1];
|
||
keyValue = dr[dc.KeyColumn].ToString();
|
||
keyRow = dr["axp__rowno"].ToString();
|
||
int keyIndex = arrKeyCols.IndexOf(keyValue);
|
||
if (keyIndex == -1)
|
||
{
|
||
arrKeyCols.Add(keyValue);
|
||
arrKeyRowNos.Add(keyRow);
|
||
}
|
||
else
|
||
{
|
||
arrKeyRowNos[keyIndex] += "," + keyRow;
|
||
}
|
||
}
|
||
}
|
||
|
||
private int GetFldArrayIndex(string fieldName)
|
||
{
|
||
int index = -1;
|
||
for (int cnt = 0; cnt < fieldControlName.Count; cnt++)
|
||
{
|
||
if (fieldControlName[cnt].ToString().ToLower() == fieldName.ToLower())
|
||
index = cnt;
|
||
}
|
||
return index;
|
||
}
|
||
|
||
private void DeleteDefaultRowInPopDc(string project, string user, string transid, string sessionId, string AxRole)
|
||
{
|
||
|
||
ArrayList deleteRows = new ArrayList();
|
||
bool isRowFound = false;
|
||
for (int i = 0; i < tstStrObj.popdcs.Count; i++)
|
||
{
|
||
TStructDef.PopDcStruct popDc = (TStructDef.PopDcStruct)tstStrObj.popdcs[i];
|
||
string[] popParentFlds = popDc.pfields.Split(',');
|
||
|
||
TStructDef.DcStruct dc = (TStructDef.DcStruct)tstStrObj.dcs[popDc.frameno - 1];
|
||
|
||
if (popDc.pFirm == "t" || !dc.DCHasDataRows)
|
||
continue;
|
||
|
||
int rowCount = GetDcRowCount(dc.frameno.ToString());
|
||
for (int k = 1; k < rowCount; k++)
|
||
{
|
||
for (int j = 0; j < popParentFlds.Length; j++)
|
||
{
|
||
string prefix = "sub";
|
||
string popFielsName = prefix + popDc.frameno + "_" + popParentFlds[j].Trim() + GetRowNoHelper(k.ToString()) + "F" + popDc.frameno;
|
||
//int idx = GetFldIndex(dc.frameno, "sub" + popDc.frameno + "_" + popParentFlds[j].Trim(), k;
|
||
DataRow dr = DsGetRow(prefix + popDc.frameno + "_" + popParentFlds[j].Trim(), k.ToString());
|
||
if (dr == null)
|
||
{
|
||
prefix = "Sub";
|
||
DsGetRow(prefix + popDc.frameno + "_" + popParentFlds[j].Trim(), k.ToString());
|
||
|
||
}
|
||
if (dr != null)
|
||
{
|
||
string fldValue = dr[prefix + popDc.frameno + "_" + popParentFlds[j].Trim()].ToString();
|
||
|
||
if (fldValue == "" || fldValue == "***")
|
||
{
|
||
string rowNo = k.ToString();
|
||
if (rowNo != "-1")
|
||
deleteRows.Add(rowNo + "F" + popDc.frameno);
|
||
isRowFound = true;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
if (isRowFound)
|
||
{
|
||
isRowFound = false;
|
||
break;
|
||
}
|
||
|
||
}
|
||
for (int dCnt = 0; dCnt < deleteRows.Count; dCnt++)
|
||
{
|
||
int fIdx = deleteRows[dCnt].ToString().IndexOf("F");
|
||
string delRowNo = deleteRows[dCnt].ToString().Substring(0, fIdx);
|
||
string delDcNo = deleteRows[dCnt].ToString().Substring(fIdx + 1);
|
||
if (GetDcRowCount(delDcNo) == 1 && delRowNo == "001")
|
||
{
|
||
TStructDef.DcStruct pdc = (TStructDef.DcStruct)tstStrObj.dcs[Convert.ToInt32(delDcNo) - 1];
|
||
pdc.DCHasDataRows = false;
|
||
tstStrObj.dcs[Convert.ToInt32(delDcNo) - 1] = pdc;
|
||
break;
|
||
}
|
||
DeleteRowInFldArrays(delDcNo, delRowNo);
|
||
int tmpRowCnt = GetDcRowCount(delDcNo);
|
||
tmpRowCnt = tmpRowCnt - 1;
|
||
UpdateRowCount("DC" + delDcNo, "DC" + delDcNo + "~" + tmpRowCnt);
|
||
}
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// Function to be called to add group
|
||
/// </summary>
|
||
/// <param name="tstData"></param>
|
||
/// <param name="fldArray"></param>
|
||
/// <param name="fldDbRowNo"></param>
|
||
/// <param name="fldValueArray"></param>
|
||
/// <param name="fldDeletedArray"></param>
|
||
/// <param name="s"></param>
|
||
/// <param name="f"></param>
|
||
/// <param name="source"></param>
|
||
/// <param name="delRows"></param>
|
||
/// <param name="changedRows"></param>
|
||
/// <param name="frameNo"></param>
|
||
/// <returns></returns>
|
||
public string CallActionWS(TStructData tstData, ArrayList fldArray, ArrayList fldDbRowNo, ArrayList fldValueArray, ArrayList fldDeletedArray, ArrayList deletedFldArrayValues, string s, string f, string source, string delRows, string changedRows, string frameNo, string calledFrom = "false", bool isScript = false)
|
||
{
|
||
string news = GetTraceString(s);
|
||
if (news != "") s = news;
|
||
result = string.Empty;
|
||
//GetGlobalVars();
|
||
|
||
string cngRows = GetChangedRows(changedRows);
|
||
delRows = GetDelRowsNode(delRows);
|
||
transid = tstData.transid.ToString();
|
||
ires = tstStrObj.structRes;
|
||
frameNo = (Convert.ToInt32(frameNo) - 1).ToString();
|
||
|
||
tstData.GetFieldValueXml(fldArray, fldDbRowNo, fldValueArray, fldDeletedArray, frameNo, calledFrom, "ALL", "");
|
||
|
||
|
||
s += tstData.fieldValueXml + memVarsData + "</row></varlist>" + delRows + cngRows;
|
||
s += HttpContext.Current.Session["axApps"].ToString();
|
||
s += HttpContext.Current.Application["axProps"].ToString() + HttpContext.Current.Session["axGlobalVars"].ToString() + HttpContext.Current.Session["axUserVars"].ToString() + "</root>";
|
||
|
||
|
||
if (ires == null)
|
||
ires = "";
|
||
|
||
if (isScript)
|
||
{
|
||
filename = "Script-" + transid;
|
||
logobj.CreateLog("Call to RemoteDoScript Web Service", sessionid, filename, "");
|
||
|
||
//Call service
|
||
objWebServiceExt = new ASBExt.WebServiceExt();
|
||
result = objWebServiceExt.callRemoteDoScriptWS(transid, s, ires, tstData.tstStrObj.WebServiceTimeout);
|
||
|
||
}
|
||
else
|
||
{
|
||
filename = "Action-" + transid;
|
||
logobj.CreateLog("Call to RemoteDoAction Web Service", sessionid, filename, "");
|
||
|
||
|
||
//Call service
|
||
objWebServiceExt = new ASBExt.WebServiceExt();
|
||
result = objWebServiceExt.CallRemoteDoActionWS(transid, s, ires, tstData.tstStrObj.WebServiceTimeout);
|
||
|
||
}
|
||
if (result != null)
|
||
result = result.Split('♠')[1];
|
||
CheckSave(result, delRows, tstData, changedRows, deletedFldArrayValues);
|
||
logobj.CreateLog("End Time : " + DateTime.Now.ToString(), sessionid, filename, "");
|
||
return result;
|
||
}
|
||
|
||
public string CallActionWS(TStructData tstData, ArrayList fldArray, ArrayList fldDbRowNo, ArrayList fldValueArray, ArrayList fldDeletedArray, ArrayList deletedFldArrayValues, string s, string f, string source, string delRows, string changedRows, string calledFrom = "false", StringBuilder files = null, bool isScript = false)
|
||
{
|
||
string news = GetTraceString(s);
|
||
if (news != "") s = news;
|
||
result = string.Empty;
|
||
if (source == "t")
|
||
{
|
||
string imagefromdb = "false";
|
||
if (HttpContext.Current.Session["AxpSaveImageDb"] != null)
|
||
imagefromdb = HttpContext.Current.Session["AxpSaveImageDb"].ToString();
|
||
if (s != string.Empty)
|
||
s = s.Replace("<root", "<root imagefromdb='" + imagefromdb + "'");
|
||
string cngRows = GetChangedRows(changedRows);
|
||
delRows = GetDelRowsNode(delRows);
|
||
transid = tstData.transid.ToString();
|
||
ires = tstStrObj.structRes;
|
||
tstData.GetFieldValueXml(fldArray, fldDbRowNo, fldValueArray, fldDeletedArray, "-1", calledFrom, "ALL", "");
|
||
s += tstData.fldValueXml + memVarsData + "</row></varlist>" + delRows + cngRows;
|
||
s += HttpContext.Current.Session["axApps"].ToString();
|
||
s += HttpContext.Current.Application["axProps"].ToString() + HttpContext.Current.Session["axGlobalVars"].ToString() + HttpContext.Current.Session["axUserVars"].ToString() + "</root>";
|
||
}
|
||
else
|
||
ires = "";
|
||
|
||
XmlDocument xmlDoc = new XmlDocument();
|
||
string newfilename = "";
|
||
if (f != "" && f.Contains("&"))
|
||
{
|
||
|
||
newfilename = f.Replace("&", "&");
|
||
|
||
s = s.Replace("__file=\"" + f.ToString() + "\"", "__file=\"" + newfilename.ToString() + "\"");//&
|
||
|
||
}
|
||
xmlDoc.LoadXml(s);
|
||
XmlNode rootNode = xmlDoc.SelectSingleNode("//root");
|
||
if (rootNode != null)
|
||
{
|
||
if (rootNode.Attributes["actname"].Value != string.Empty)
|
||
AxActiveAction = rootNode.Attributes["actname"].Value;
|
||
}
|
||
|
||
if (ires == null)
|
||
ires = "";
|
||
if (isScript)
|
||
{
|
||
filename = "Script-" + transid;
|
||
logobj.CreateLog("Call to RemoteDoScript Web Service", sessionid, filename, "");
|
||
|
||
//Call service
|
||
objWebServiceExt = new ASBExt.WebServiceExt();
|
||
result = objWebServiceExt.callRemoteDoScriptWS(transid, s, ires, tstData.tstStrObj.WebServiceTimeout);
|
||
|
||
}
|
||
else
|
||
{
|
||
filename = "Action-" + transid;
|
||
logobj.CreateLog("Call to RemoteDoAction Web Service", sessionid, filename, "");
|
||
|
||
//Call service
|
||
objWebServiceExt = new ASBExt.WebServiceExt();
|
||
result = objWebServiceExt.CallRemoteDoActionWS(transid, s, ires, tstData.tstStrObj.WebServiceTimeout);
|
||
}
|
||
|
||
string requestProcess_logtime = result.Split('♠')[0];
|
||
result = result.Split('♠')[1];
|
||
//avoid special chars in result DURING notify
|
||
if (result != "This proces taking time is more than expected. You will get a notification once completed")
|
||
CheckSave(result, delRows, tstData, changedRows, deletedFldArrayValues, (files != null ? files.ToString() : ""));
|
||
AxActiveAction = string.Empty;
|
||
logobj.CreateLog("End Time : " + DateTime.Now.ToString(), sessionid, filename, "");
|
||
result = requestProcess_logtime + "♠" + result;
|
||
return result;
|
||
}
|
||
|
||
private void CheckSave(string result, string delRows, TStructData tstData, string changedRows, ArrayList deletedFldArrayValues, string files = "")
|
||
{
|
||
if (result == "") return;
|
||
result = result.Replace("\\", ";bkslh");
|
||
//To save the image fields in server folders,
|
||
//the below code checks if the action was 'save' and copies the images to the folders.
|
||
|
||
string returnStr = result.Replace("*$*", "¿");
|
||
string[] newResult = returnStr.Split('¿');
|
||
for (int i = 0; i < newResult.Length; i++)
|
||
{
|
||
if (newResult[i].ToString() == "")
|
||
continue;
|
||
JArray action;
|
||
try
|
||
{
|
||
JObject actionresult = JObject.Parse(newResult[i].ToString());
|
||
action = (JArray)actionresult["command"];
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
throw ex;
|
||
}
|
||
|
||
if (action != null)
|
||
{
|
||
string cmd = string.Empty;
|
||
string cmdVal = string.Empty;
|
||
string pname = string.Empty;
|
||
string pvalue = string.Empty;
|
||
string showin = string.Empty;
|
||
string recId = string.Empty;
|
||
string actionValue = string.Empty;
|
||
for (int m = 0; m < action.Count; m++)
|
||
{
|
||
cmd = (string)action[m]["cmd"].ToString().Trim('"');
|
||
|
||
cmdVal = (string)action[m]["cmdval"].ToString().Trim('"');
|
||
|
||
if (cmd == "openiview")
|
||
{
|
||
pname = (string)action[m]["pname"].ToString().Trim('"');
|
||
pvalue = (string)action[m]["pvalue"].ToString().Trim('"');
|
||
showin = (string)action[m]["showin"].ToString().Trim('"');
|
||
AddParamsToSession(cmdVal, pname, pvalue, showin);
|
||
}
|
||
|
||
|
||
if (cmd == "action")
|
||
actionValue = cmdVal;
|
||
else if (cmd == "recid")
|
||
recId = cmdVal;
|
||
}
|
||
|
||
|
||
if (actionValue.ToLower() == "save")
|
||
{
|
||
if (HttpContext.Current.Session["AxReloadCloud"] != null)
|
||
{
|
||
if (HttpContext.Current.Session["AxReloadCloud"].ToString() == transid)
|
||
{
|
||
try
|
||
{
|
||
HttpContext.Current.Session["IscloudRelogin"] = "true";
|
||
HttpContext.Current.Session["AxInternalRefresh"] = "true";
|
||
util.ClearAxpStructConfigInRedis(Constants.AXCONFIGGENERAL, "", "", "general", "");
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
HttpContext.Current.Session["IscloudRelogin"] = "true";
|
||
HttpContext.Current.Session["AxInternalRefresh"] = "true";
|
||
logobj.CreateLog("Main Page Reload-" + ex.Message, sessionid, "MainPageReload", "new", "true");
|
||
}
|
||
}
|
||
}
|
||
|
||
if (util.isRealTimeCacEnabled(transid, tstStrObj))
|
||
HttpContext.Current.Session["AxRelKeys"] = util.GetAxRelations(tstData.transid);
|
||
else
|
||
HttpContext.Current.Session["AxRelKeys"] = null;
|
||
|
||
if (recId != string.Empty)
|
||
{
|
||
if (tstStrObj.AxpFileUploadFields.Count > 0)
|
||
RemoveUnwantedAxpFiles(transid, recId, delRows, tstData, deletedFldArrayValues);
|
||
|
||
//TStructDef strObj = cm.GetStructDef(project, sessionid, user, transid, AxRole);
|
||
if (tstStrObj.ContainsImage)
|
||
|
||
SaveImageToFolder(tstStrObj, transid, sessionid, recId, deletedFldArrayValues);
|
||
|
||
if (tstStrObj.ContainsGridAttach)
|
||
{
|
||
try
|
||
{
|
||
string gridAttSaveResult = SaveGridAttachments(transid, sessionid, recId, delRows, tstData, changedRows, deletedFldArrayValues);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
logobj.CreateLog("Error while SaveGridAttachments-" + ex.Message, sessionid, "SaveGridAttachments", "new", "true");
|
||
}
|
||
}
|
||
|
||
if (attachDir && (!string.IsNullOrEmpty(files) || removeFiles.Count > 0))
|
||
SaveAttached(files, recId);
|
||
}
|
||
RefFastDataOnSave(AxActiveAction);
|
||
RefInMemOnSave();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
private void RefFastDataOnSave(string taskName)
|
||
{
|
||
//If fast data refresh events are not empty
|
||
FDW fobj = FDW.Instance;
|
||
for (int i = 0; i < tstStrObj.fastDataRefEvent.Count; i++)
|
||
{
|
||
if (tstStrObj.fastDataRefEvent[i].ToString().Contains(taskName))
|
||
{
|
||
//TODO: Push refresh in Fastdata
|
||
string dsName = string.Empty;
|
||
dsName = tstStrObj.fastDataRefDSName[i].ToString();
|
||
fobj.PushToDsRefresh(util.GetFastDataDSName(null, dsName));
|
||
//objfd.RefreshFastDataset(dsName);
|
||
//Thread thread = new Thread(() => objfd.PushRefreshDs(dsName, user));
|
||
//thread.Start();
|
||
}
|
||
}
|
||
}
|
||
|
||
private void AddParamsToSession(string ivName, string paramNames, string paramVals, string showIn)
|
||
{
|
||
|
||
string customIv = GetFieldValue("1", "axp_ivname");
|
||
if (customIv != "")
|
||
ivName = customIv;
|
||
|
||
if (paramNames.IndexOf("###") != -1)
|
||
paramNames = paramNames.Replace("###", "¿");
|
||
|
||
if (paramVals.IndexOf("###") != -1)
|
||
paramVals = paramVals.Replace("###", "¿");
|
||
|
||
string[] strParams = paramNames.Split('¿');
|
||
string[] strParamVals = paramVals.Split('¿');
|
||
var paramsStr = "";
|
||
int pCount = strParams.Length;
|
||
Util.Util utilObj = new Util.Util();
|
||
|
||
if (pCount != 0)
|
||
{
|
||
|
||
var paraName = ""; var paraVal = ""; var fres = "";
|
||
for (var cmp = 0; cmp < pCount; cmp++)
|
||
{
|
||
paraName = strParams[cmp];
|
||
paraVal = strParamVals[cmp];
|
||
//paraVal = utilObj.CheckUrlSpecialChars(paraVal);
|
||
paraVal = paraVal.Replace("=", "@eq@");
|
||
fres = paraName + "=" + paraVal;
|
||
fres = fres.Replace("&", "--.--");
|
||
paramsStr = paramsStr + "&" + fres;
|
||
}
|
||
|
||
}
|
||
if (showIn != "" && showIn == "pop")
|
||
showIn = "&pop=true";
|
||
paramsStr = paramsStr + showIn;
|
||
//HttpContext.Current.Session["AxActionParams" + ivName] = paramsStr;
|
||
//HttpContext.Current.Session["IviewNavigationData-" + ivName] = paramsStr;
|
||
|
||
ASB.WebService webService = new ASB.WebService();
|
||
|
||
webService.SetIviewNavigationData(paramsStr, ivName);
|
||
}
|
||
|
||
private string AddToken(string iXml)
|
||
{
|
||
string token = "";
|
||
token = util.GetToken();
|
||
HttpContext.Current.Session["axpToken"] = token;
|
||
iXml = iXml.Replace("<sqlresultset ", "<sqlresultset token='" + token + "' ");
|
||
return iXml;
|
||
}
|
||
|
||
public string GetRapidFieldValueXml(ArrayList fldArray, ArrayList fldDbRowNo, ArrayList fldValueArray, ArrayList fldDeletedArray, string frameNo, string rowNo, string fieldName)
|
||
{
|
||
string iXml = string.Empty;
|
||
int idx = tstStrObj.GetFieldIndex(fieldName);
|
||
TStructDef.FieldStruct fld = (TStructDef.FieldStruct)tstStrObj.flds[idx];
|
||
UpdateDataList(fldArray, fldDbRowNo, fldValueArray, fldDeletedArray);
|
||
DeleteDefaultRowInPopDc(project, user, transid, sessionid, AxRole);
|
||
DSRapidFieldValueXML(frameNo, rowNo, fieldName, "Rapid", fld);
|
||
|
||
if (fld.FldRapidAllParents != string.Empty)
|
||
iXml = GetGlobalVarValues(fld.FldRapidAllParents);
|
||
return iXml;
|
||
}
|
||
|
||
public string CallGetRapidDepFldWS(TStructData tstData, ArrayList fldArray, ArrayList fldDbRowNo, ArrayList fldValueArray, ArrayList fldDeletedArray, string inputXml, string frameNo, string rowNo, string fieldName, string subGridInfo, string parentInfo)
|
||
{
|
||
DateTime stTime = DateTime.Now;
|
||
string traceSep = GetTraceString(inputXml);
|
||
if (traceSep != "") inputXml = traceSep;
|
||
|
||
//insert token in the input xml
|
||
inputXml = AddToken(inputXml);
|
||
|
||
string result = null;
|
||
transid = tstData.transid.ToString();
|
||
AxActDepField = fieldName;
|
||
int idx = tstStrObj.GetFieldIndex(fieldName);
|
||
TStructDef.FieldStruct fld = (TStructDef.FieldStruct)tstStrObj.flds[idx];
|
||
bool isDcGrid = false;
|
||
Dictionary<string, string> IncludeDcRows = new Dictionary<string, string>();
|
||
isDcGrid = IsDcGrid(frameNo, tstStrObj);
|
||
logobj.CreateLog("Constructing input xml GetRapidDepFLd-field" + fld.name, sessionid, "GetRapidDep-" + transid, "new");
|
||
UpdateDataList(fldArray, fldDbRowNo, fldValueArray, fldDeletedArray);
|
||
DeleteDefaultRowInPopDc(project, user, transid, sessionid, AxRole);
|
||
DSRapidFieldValueXML(frameNo, rowNo, fieldName, "RapidDep", fld);
|
||
if (fld.FldRapidAllParents != string.Empty)
|
||
inputXml += GetGlobalVarValues(fld.FldRapidAllParents);
|
||
inputXml += tstData.fieldValueXml + memVarsData;
|
||
inputXml += HttpContext.Current.Session["axApps"].ToString() + HttpContext.Current.Application["axProps"].ToString() + HttpContext.Current.Session["axGlobalVars"].ToString() + HttpContext.Current.Session["axUserVars"].ToString();
|
||
inputXml += "</sqlresultset>";
|
||
//Call service
|
||
objWebServiceExt = new ASBExt.WebServiceExt();
|
||
logobj.CreateLog("Input xml GetRapidDepFLd=" + inputXml, sessionid, "GetRapidDep-" + transid, "");
|
||
DateTime asStart = DateTime.Now;
|
||
result = objWebServiceExt.CallGetRapidDepFldVals(transid, inputXml);
|
||
logobj.CreateLog("RapidGetDepentendFieldValues Result=" + result, sessionid, "GetRapidDep-" + transid, "");
|
||
DateTime asEnd = DateTime.Now;
|
||
if (logTimeTaken)
|
||
{
|
||
webTime1 = asStart.Subtract(stTime).TotalMilliseconds;
|
||
webTime2 = DateTime.Now.Subtract(asEnd).TotalMilliseconds;
|
||
asbTime = asEnd.Subtract(asStart).TotalMilliseconds;
|
||
}
|
||
return result;
|
||
}
|
||
|
||
private string GetGlobalVarValues(string parentFlds)
|
||
{
|
||
StringBuilder paramsNode = new StringBuilder();
|
||
paramsNode.Append("<params>");
|
||
List<string> paramFlds = parentFlds.Split(',').ToList();
|
||
|
||
for (int j = 0; j < paramFlds.Count; j++)
|
||
{
|
||
for (int i = 0; i < tstStrObj.lstGlobalParams.Count; i++)
|
||
{
|
||
string[] strVar = tstStrObj.lstGlobalParams[i].ToString().Split('=');
|
||
string value = CheckSpecialChars(strVar[1].ToString());
|
||
string pName = paramFlds[j].ToString();
|
||
if (strVar[0].ToString() == pName)
|
||
{
|
||
paramsNode.Append("<" + pName + ">" + value + "</" + pName + ">");
|
||
}
|
||
}
|
||
}
|
||
|
||
if (HttpContext.Current.Session["user"] != null)
|
||
paramsNode.Append("<username>" + HttpContext.Current.Session["user"].ToString() + "</username>");
|
||
|
||
paramsNode.Append("</params>");
|
||
return paramsNode.ToString();
|
||
}
|
||
|
||
public string CallGetDepFldWS(TStructData tstData, ArrayList fldArray, ArrayList fldDbRowNo, ArrayList fldValueArray, ArrayList fldDeletedArray, string s, string frameNo, string rowNo, string fieldName, string subGridInfo, string parentInfo)
|
||
{
|
||
DateTime stTime = DateTime.Now;
|
||
string news = GetTraceString(s);
|
||
if (news != "") s = news;
|
||
string result = null;
|
||
transid = tstData.transid.ToString();
|
||
ires = tstStrObj.structRes;
|
||
AxActDepField = fieldName;
|
||
int idx = tstStrObj.GetFieldIndex(fieldName);
|
||
TStructDef.FieldStruct fld = (TStructDef.FieldStruct)tstStrObj.flds[idx];
|
||
ArrayList AxDepFields = new ArrayList();
|
||
bool isDcGrid = false;
|
||
Dictionary<string, string> IncludeDcRows = new Dictionary<string, string>();
|
||
isDcGrid = IsDcGrid(frameNo, tstStrObj);
|
||
|
||
if (isDcGrid)
|
||
{
|
||
string DepFlds = fld.fieldSqlDepParents;
|
||
AxDepFields = GetParDepFlds(fld.fieldSqlDepParents);
|
||
}
|
||
|
||
if (fld.fieldSqlGridDeps != string.Empty)
|
||
{
|
||
string[] strSDeps = fld.fieldSqlGridDeps.Split(',');
|
||
for (int i = 0; i < strSDeps.Length; i++)
|
||
{
|
||
AxDepFields.Add(strSDeps[i].ToString());
|
||
}
|
||
|
||
//The below statement will add the current field to the dependent fields if the current dc is a grid dc
|
||
//and it has dependents in other grid, then all the row values for the field should be sent in the input xml.
|
||
if (isDcGrid)
|
||
AxDepFields.Add(fld.name);
|
||
}
|
||
|
||
|
||
//If the field has non grid sql dependents, then send the parent values for that dep field also
|
||
if (IsDcGrid(frameNo, tstStrObj))
|
||
{
|
||
|
||
//If the call is made from a parent grid, then all its subgriud and their respective rows for the given parent row
|
||
//will be sent in the given format: dcno~rowno1,rowno2¿dcno~rowno1,rowno2...
|
||
if (subGridInfo != "")
|
||
{
|
||
if (subGridInfo.IndexOf("¿") != -1)
|
||
{
|
||
string[] subgridDcs = subGridInfo.Split('¿');
|
||
for (int i = 0; i < subgridDcs.Length; i++)
|
||
{
|
||
if (subgridDcs[i] != string.Empty)
|
||
{
|
||
string[] dcInfo = subgridDcs[i].ToString().Split('~');
|
||
IncludeDcRows.Add(dcInfo[0], dcInfo[1]);
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
IncludeDcRows.Add(subGridInfo.Substring(0, subGridInfo.IndexOf("~")), subGridInfo.Substring(subGridInfo.IndexOf("~") + 1));
|
||
}
|
||
}
|
||
|
||
//If the call is made from sub grid, then the parentinfo will contain the parent dc no and parent row no in the given format : dcno~rowno
|
||
if (parentInfo != "")
|
||
{
|
||
IncludeDcRows.Add(parentInfo.Substring(0, parentInfo.IndexOf("~")), parentInfo.Substring(parentInfo.IndexOf("~") + 1));
|
||
}
|
||
|
||
|
||
//first update the list with the new fldArray.
|
||
UpdateDataList(fldArray, fldDbRowNo, fldValueArray, fldDeletedArray);
|
||
|
||
DeleteDefaultRowInPopDc(project, user, transid, sessionid, AxRole);
|
||
|
||
CreateFieldValueXmlPerf(frameNo, rowNo, AxDepFields, fld.fieldDepGridDcs, IncludeDcRows, "");
|
||
|
||
//Refer bug - AGI003591
|
||
//This function was converting the last invalid row to valid row
|
||
//UpdateGridDelRowVal(int.Parse(frameNo));
|
||
|
||
s += tstData.fieldValueXml;
|
||
}
|
||
else
|
||
{
|
||
|
||
if (AxDepFields.Count > 0)
|
||
{
|
||
//if a non grid fields has dependent grid dc fields, then send that dc fields data also.
|
||
//first update the list with the new fldArray.
|
||
UpdateDataList(fldArray, fldDbRowNo, fldValueArray, fldDeletedArray);
|
||
DeleteDefaultRowInPopDc(project, user, transid, sessionid, AxRole);
|
||
CreateFieldValueXmlPerf(frameNo, rowNo, AxDepFields, fld.fieldDepGridDcs, IncludeDcRows, "");
|
||
s += tstData.fieldValueXml;
|
||
}
|
||
else
|
||
{
|
||
//if (fld.fieldDepFillDcs != string.Empty)
|
||
//{
|
||
// string[] depFillDcs = fld.fieldDepFillDcs.Split(',');
|
||
// for (int dIdx = 0; dIdx < depFillDcs.Length; dIdx++)
|
||
// {
|
||
// TStructDef.DcStruct depDc = (TStructDef.DcStruct)tstStrObj.dcs[Convert.ToInt32(depFillDcs[dIdx].ToString()) - 1];
|
||
|
||
// }
|
||
//}
|
||
|
||
|
||
//if a non grid fields has dependent grid Fill grid dc, then send that dc data also.
|
||
//TODO: this condition should not send all the fillgrid dep dc data
|
||
tstData.GetFieldValueXml(fldArray, fldDbRowNo, fldValueArray, fldDeletedArray, "-1", "GetDependents", "NG", fld.fieldDepFillDcs);
|
||
s += tstData.fieldValueXml;
|
||
}
|
||
}
|
||
|
||
s += memVarsData;
|
||
s += HttpContext.Current.Session["axApps"].ToString() + HttpContext.Current.Application["axProps"].ToString() + HttpContext.Current.Session["axGlobalVars"].ToString() + HttpContext.Current.Session["axUserVars"].ToString();
|
||
s += "</sqlresultset>";
|
||
//Call service
|
||
objWebServiceExt = new ASBExt.WebServiceExt();
|
||
|
||
DateTime asStart = DateTime.Now;
|
||
result = objWebServiceExt.CallGetDepentendFieldValuesWS(transid, s, ires);
|
||
DateTime asEnd = DateTime.Now;
|
||
if (logTimeTaken)
|
||
{
|
||
webTime1 = asStart.Subtract(stTime).TotalMilliseconds;
|
||
webTime2 = DateTime.Now.Subtract(asEnd).TotalMilliseconds;
|
||
asbTime = asEnd.Subtract(asStart).TotalMilliseconds;
|
||
}
|
||
return result;
|
||
}
|
||
|
||
public string CallGetDepFldPerfWS(TStructData tstData, ArrayList fldArray, ArrayList fldDbRowNo, ArrayList fldValueArray, ArrayList fldDeletedArray, ArrayList regVarFldList, string s, string frameNo, string rowNo, string perfDepFldName, string fieldName, string subGridInfo, string parentInfo)
|
||
{
|
||
DateTime stTime = DateTime.Now;
|
||
string news = GetTraceString(s);
|
||
if (news != "") s = news;
|
||
string result = null;
|
||
transid = tstData.transid.ToString();
|
||
AxActDepField = fieldName;
|
||
ires = tstStrObj.structRes;
|
||
tstData.GetPerfFieldValueXml(fldArray, fldDbRowNo, fldValueArray, fldDeletedArray, "-1", "GetDependents", "NG", "");
|
||
|
||
string imagefromdb = "false";
|
||
if (HttpContext.Current.Session["AxpSaveImageDb"] != null)
|
||
imagefromdb = HttpContext.Current.Session["AxpSaveImageDb"].ToString();
|
||
if (s != string.Empty)
|
||
s = s.Replace("<sqlresultset", "<sqlresultset imagefromdb='" + imagefromdb + "'");
|
||
s += PerfGetDepFldInput(fieldName, perfDepFldName, frameNo, rowNo);
|
||
s += memVarsData;
|
||
if (regVarFldList.Count > 0)
|
||
{
|
||
string regVarXml = "";
|
||
try
|
||
{
|
||
foreach (var varVal in regVarFldList)
|
||
{
|
||
regVarXml += "<" + varVal.ToString().Split(':')[0] + " t='" + varVal.ToString().Split(':')[1] + "'>" + varVal.ToString().Split(':')[2] + "</" + varVal.ToString().Split(':')[0] + ">";
|
||
}
|
||
}
|
||
catch (Exception ex) { }
|
||
s += regVarXml;
|
||
}
|
||
s += HttpContext.Current.Session["axApps"].ToString() + HttpContext.Current.Application["axProps"].ToString() + HttpContext.Current.Session["axGlobalVars"].ToString() + HttpContext.Current.Session["axUserVars"].ToString();
|
||
s += "</sqlresultset>";
|
||
//Call service
|
||
objWebServiceExt = new ASBExt.WebServiceExt();
|
||
DateTime asStart = DateTime.Now;
|
||
result = objWebServiceExt.CallGetDepentendFieldValuesWS(transid, s, ires);
|
||
DateTime asEnd = DateTime.Now;
|
||
if (logTimeTaken)
|
||
{
|
||
webTime1 = asStart.Subtract(stTime).TotalMilliseconds;
|
||
webTime2 = DateTime.Now.Subtract(asEnd).TotalMilliseconds;
|
||
asbTime = asEnd.Subtract(asStart).TotalMilliseconds;
|
||
}
|
||
return result;
|
||
}
|
||
|
||
|
||
public string PerfGetDepFldInput(string fieldName, string perfDepFldName, string frameNo, string rowNo)
|
||
{
|
||
string inputFldXML = string.Empty;
|
||
try
|
||
{
|
||
int dfIndx = tstStrObj.GetFieldIndex(fieldName);
|
||
TStructDef.FieldStruct dfld = (TStructDef.FieldStruct)tstStrObj.flds[dfIndx];
|
||
string[] parentFlds = dfld.fieldParents.Replace("~", ",").Split(',');// a66 node of dependent field
|
||
string[] parentDcFlds = new string[] { };
|
||
if (perfDepFldName.StartsWith("dc"))
|
||
{
|
||
try
|
||
{
|
||
int dcFrame = int.Parse(perfDepFldName.Substring(2));
|
||
TStructDef.DcStruct pfldDc = (TStructDef.DcStruct)tstStrObj.dcs[dcFrame - 1];
|
||
if (pfldDc.dcPList != "")
|
||
parentDcFlds = pfldDc.dcPList.Replace("~", ",").Split(',');
|
||
}
|
||
catch (Exception ex) { }
|
||
}
|
||
string[] lstparentFlds = parentFlds.Union(parentDcFlds).ToArray();
|
||
string globalVars = HttpContext.Current.Session["axGlobalVars"].ToString();
|
||
string userVars = HttpContext.Current.Session["axUserVars"].ToString();
|
||
TStructDef.DcStruct dfldDc = (TStructDef.DcStruct)tstStrObj.dcs[dfld.fldFrameNo - 1];
|
||
for (int i = 0; i < lstparentFlds.Length; i++)
|
||
{
|
||
int arNumber = 0;
|
||
int pIndx = tstStrObj.GetFieldIndex(lstparentFlds[i]);
|
||
if (pIndx == -1)
|
||
{
|
||
if (globalVars.ToLower().IndexOf("<" + lstparentFlds[i].ToLower() + ">") > -1)
|
||
continue;
|
||
else if (userVars.ToLower().IndexOf("<" + lstparentFlds[i].ToLower() + ">") > -1)
|
||
continue;
|
||
else
|
||
continue;
|
||
}
|
||
TStructDef.FieldStruct pfld = (TStructDef.FieldStruct)tstStrObj.flds[pIndx];
|
||
TStructDef.DcStruct pfldDc = (TStructDef.DcStruct)tstStrObj.dcs[pfld.fldFrameNo - 1];
|
||
//if (pfld.fldFrameNo == dfld.fldFrameNo && dfldDc.isgrid) // Dependent & Parent fields both are in same dc and the dc is grid dc should take active row only
|
||
// arNumber = int.Parse(rowNo);
|
||
|
||
if (pfldDc.isgrid && pfldDc.DCHasDataRows)// Grid dc field should have 1 row minimum else the field not required in input
|
||
inputFldXML += PerfGetDepFldValues(pfld.fldFrameNo, arNumber, "GetDep", pfld);
|
||
else if (!pfldDc.isgrid)// Should take all the non grid dc fields following teh parents.
|
||
inputFldXML += PerfGetDepFldValues(pfld.fldFrameNo, arNumber, "GetDep", pfld);
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
logobj.CreateLog("PerfGetDepFldInput function -" + ex.Message, sessionid, "Exception-" + transid, "");
|
||
}
|
||
return inputFldXML;
|
||
}
|
||
|
||
private string PerfGetDepFldValues(int dcNo, int arNumber, string calledFrom, TStructDef.FieldStruct fld = new TStructDef.FieldStruct())
|
||
{
|
||
string iXml = string.Empty;
|
||
TStructDef.DcStruct pfldDc = (TStructDef.DcStruct)tstStrObj.dcs[dcNo - 1];
|
||
DataTable thisDataTable = dsDataSet.Tables["dc" + dcNo];
|
||
string dcNumber = dcNo.ToString();
|
||
string isGrdVld = string.Empty;
|
||
foreach (DataRow dr in thisDataTable.Rows)
|
||
{
|
||
int rowNo = Convert.ToInt32(dr["axp__rowno"]);
|
||
if (pfldDc.isgrid)//Refer Bug:AGI004107
|
||
isGrdVld = dr["axp__isGrdVld" + dcNo].ToString();
|
||
if (isGrdVld != "false")
|
||
{
|
||
DataTable dtOld = dsDataSet.Tables["dc_old" + dcNo];
|
||
DataRow drOld = dtOld.Rows.Find(rowNo);
|
||
string value = string.Empty;
|
||
string oldValue = string.Empty;
|
||
string idValue = string.Empty;
|
||
string oldIdValue = string.Empty;
|
||
value = dr[fld.name].ToString();
|
||
if (fld.savenormal)
|
||
idValue = dr["id__" + fld.name].ToString();
|
||
|
||
if (drOld != null)
|
||
{
|
||
oldValue = drOld["old__" + fld.name].ToString();
|
||
if (fld.savenormal)
|
||
oldIdValue = drOld["oldid__" + fld.name].ToString();
|
||
}
|
||
iXml += WsPerfFieldToXML(fld.name, Convert.ToString(rowNo), value, oldValue, idValue, oldIdValue, dcNumber, fld.savenormal, fld);
|
||
}
|
||
}
|
||
return iXml;
|
||
}
|
||
|
||
public string CallRefreshDc(ArrayList fldArray, ArrayList fldDbRowNo, ArrayList fldValueArray, ArrayList fldDeletedArray, string iXml, string frameNo, string includeDcs)
|
||
{
|
||
string strTrace = GetTraceString(iXml);
|
||
if (strTrace != "") iXml = strTrace;
|
||
string result = string.Empty;
|
||
ires = tstStrObj.structRes;
|
||
GetFieldValueXml(fldArray, fldDbRowNo, fldValueArray, fldDeletedArray, "-1", "RefreshDc", "NG", includeDcs);
|
||
iXml += fieldValueXml + memVarsData;
|
||
iXml += HttpContext.Current.Session["axApps"].ToString() + HttpContext.Current.Application["axProps"].ToString() + HttpContext.Current.Session["axGlobalVars"].ToString() + HttpContext.Current.Session["axUserVars"].ToString();
|
||
iXml += "</sqlresultset>";
|
||
//Call service
|
||
objWebServiceExt = new ASBExt.WebServiceExt();
|
||
result = objWebServiceExt.CallRefreshDc(iXml, ires);
|
||
return result;
|
||
}
|
||
|
||
private ArrayList GetParDepFlds(string depStr)
|
||
{
|
||
ArrayList arrDeps = new ArrayList();
|
||
string[] depFlds = depStr.Split(',');
|
||
for (int i = 0; i < depFlds.Length; i++)
|
||
{
|
||
arrDeps.Add(depFlds[i].ToString());
|
||
}
|
||
return arrDeps;
|
||
}
|
||
|
||
public string GetVisibleFormatGridsHtml(TStructDef strObj, string visibleDCsStr)
|
||
{
|
||
string[] visibleDCs = visibleDCsStr.Split(',');
|
||
|
||
StringBuilder strDcHtml = new StringBuilder();
|
||
for (int i = 0; i < visibleDCs.Length; i++)
|
||
{
|
||
string dcStr = visibleDCs[i].ToString().Substring(2);
|
||
int dcNo = Convert.ToInt32(dcStr);
|
||
if (depFormatDcs.IndexOf(dcStr) != -1 && ChangedDcs.IndexOf(dcStr) != -1)
|
||
try
|
||
{
|
||
strDcHtml.Append(strObj.GetTabDcHTML(dcNo, this, "false"));
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
|
||
}
|
||
}
|
||
|
||
return strDcHtml.ToString();
|
||
}
|
||
|
||
public string CallMsFillGrid(TStructData tstData, ArrayList fldArray, ArrayList fldDbRowNo, ArrayList fldValueArray, ArrayList fldDeletedArray, string frameNo, string s, string paramXml, string fgName)
|
||
{
|
||
string news = GetTraceString(s);
|
||
if (news != "") s = news;
|
||
string result = null;
|
||
//GetGlobalVars();
|
||
transid = tstData.transid.ToString();
|
||
ires = tstStrObj.structRes;
|
||
|
||
tstData.GetFieldValueXml(fldArray, fldDbRowNo, fldValueArray, fldDeletedArray, "-1", "FillGrid", "NG", "");
|
||
|
||
s += tstData.fieldValueXml + memVarsData;
|
||
s += HttpContext.Current.Session["axApps"].ToString() + HttpContext.Current.Application["axProps"].ToString() + HttpContext.Current.Session["axGlobalVars"].ToString() + HttpContext.Current.Session["axUserVars"].ToString();
|
||
s += "</sqlresultset>";
|
||
|
||
#region Data cache in session
|
||
//var dcFsg = tstStrObj.fgs.Cast<TStructDef.FGStruct>().Where(f => f.fgtargetdc == ("dc" + frameNo) && f.fgName == fgName).ToList();
|
||
//string fgSqlParam = string.Empty, fgSqlParamVal = string.Empty;
|
||
//if (dcFsg.Count > 0)
|
||
//{
|
||
// TStructDef.FGStruct fg = ((TStructDef.FGStruct)dcFsg[0]);
|
||
// fgSqlParam = fg.fgSqlParams;
|
||
// if (fgSqlParam != string.Empty)
|
||
// {
|
||
// XmlDocument xml = new XmlDocument();
|
||
// xml.LoadXml(s.ToLower());
|
||
// foreach (var name in fgSqlParam.Split(','))
|
||
// {
|
||
// var xnList = xml.SelectNodes("/sqlresultset/" + name);
|
||
// foreach (XmlNode text in xnList)
|
||
// fgSqlParamVal += "~" + name + ":" + text.InnerText.ToLower();
|
||
// }
|
||
// }
|
||
//}
|
||
//if (HttpContext.Current.Session["FillGrid-" + transid + "-" + fgName + "-" + fgSqlParamVal] != null)
|
||
// result = HttpContext.Current.Session["FillGrid-" + transid + "-" + fgName + "-" + fgSqlParamVal].ToString();
|
||
//else
|
||
//{
|
||
// //Call service
|
||
// objWebServiceExt = new ASBExt.WebServiceExt();
|
||
// result = objWebServiceExt.CallGetFillGridValuesWS(transid, s, ires);
|
||
// HttpContext.Current.Session["FillGrid-" + transid + "-" + fgName + "-" + fgSqlParamVal] = result;
|
||
//}
|
||
#endregion
|
||
//Call service
|
||
objWebServiceExt = new ASBExt.WebServiceExt();
|
||
result = objWebServiceExt.CallGetFillGridValuesWS(transid, s, ires);
|
||
return result;
|
||
}
|
||
|
||
public string GetCacheFileRecId(string recId)
|
||
{
|
||
string recIddataJson = "{\"data\": [";
|
||
|
||
recIddataJson += "{\"n\":\"DC1\",\"v\":\"1\",\"t\":\"dc\"},{\"n\":\"recid\",\"v\":\"" + recId + "\",\"r\":\"0\",\"t\":\"s\"}]}";
|
||
DSSubmit("recid", 0, recId, "");
|
||
return recIddataJson;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Function to return the Fill pop up html for the format fill grid.
|
||
/// </summary>
|
||
/// <param name="result"></param>
|
||
/// <param name="strObj"></param>
|
||
/// <param name="dcNo"></param>
|
||
/// <param name="src"></param>
|
||
/// <returns></returns>
|
||
public string ConstructFormatFillGrid(string result, TStructDef strObj, string dcNo, string src)
|
||
{
|
||
XmlDocument xmlDoc = new XmlDocument();
|
||
xmlDoc.LoadXml(result);
|
||
int m = 0;
|
||
string fgRows = "";
|
||
string cRows = "";
|
||
string headRow = "";
|
||
string chkboxVal = "";
|
||
int colcount = 0;
|
||
string fgHTML = string.Empty;
|
||
XmlNodeList headNodes;
|
||
int rowCnt = 0;
|
||
string firstColValue = string.Empty;
|
||
headNodes = xmlDoc.SelectNodes("//response/row");
|
||
TStructDef.DcStruct dc = ((TStructDef.DcStruct)(strObj.dcs[Convert.ToInt32(dcNo) - 1]));
|
||
foreach (XmlNode resNode in headNodes)
|
||
{
|
||
colcount = 0;
|
||
rowCnt = rowCnt + 1;
|
||
XmlNodeList headers = resNode.ChildNodes;
|
||
foreach (XmlNode hdrNode in headers)
|
||
{
|
||
colcount = colcount + 1;
|
||
string selColName = hdrNode.Name.ToLower();
|
||
int hIndex = dc.HideColumns.IndexOf(selColName);
|
||
|
||
if (hIndex == -1 && selColName != "nselection" && selColName != "cselection" && selColName != "dselection")
|
||
{
|
||
if (rowCnt == 1)
|
||
{
|
||
headRow = headRow + "<th>" + hdrNode.Name + "</th>";
|
||
}
|
||
cRows = cRows + "<td class='fgData'><label>" + hdrNode.InnerText + "</label></td>";
|
||
}
|
||
|
||
if (selColName.ToLower() == dc.MapColumn)
|
||
{
|
||
firstColValue = hdrNode.InnerText;
|
||
}
|
||
if (dc.Action != "")
|
||
{
|
||
if (selColName.Substring(1, selColName.Length - 1) == "selection")
|
||
{
|
||
if (chkboxVal == "")
|
||
chkboxVal = selColName + "♣" + hdrNode.InnerText;
|
||
else
|
||
chkboxVal += "¿" + selColName + "♣" + hdrNode.InnerText;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (selColName == dc.KeyColumn)
|
||
{
|
||
if (chkboxVal == "")
|
||
chkboxVal = selColName + "♣" + hdrNode.InnerText;
|
||
else
|
||
chkboxVal += "¿" + selColName + "♣" + hdrNode.InnerText;
|
||
}
|
||
}
|
||
}
|
||
|
||
string keyColName = dc.KeyColumn;
|
||
if (dc.MapParentCol != string.Empty)
|
||
keyColName = dc.MapParentCol;
|
||
else
|
||
keyColName = dc.KeyColumn;
|
||
|
||
if (firstColValue != "" && IsDupKeyColValue(keyColName, dcNo, firstColValue))
|
||
{
|
||
fgRows = fgRows + "<tr><td width='15'><span class=tem1><input class='fgChk' type=checkbox disabled='disabled' name='chkItem' " + m + " value=\"" + chkboxVal + "\" onclick='javascript:ChkHdrCheckbox(this,\"t\");' ></span></td>" + cRows + "</tr>";
|
||
}
|
||
else
|
||
fgRows = fgRows + "<tr><td width='15'><span class=tem1><input class='fgChk' type=checkbox name='chkItem' " + m + " value=\"" + chkboxVal + "\" onclick='javascript:ChkHdrCheckbox(this,\"t\");' ></span></td>" + cRows + "</tr>";
|
||
|
||
cRows = "";
|
||
chkboxVal = "";
|
||
}
|
||
|
||
if (fgRows.ToString() != "")
|
||
{
|
||
if (src == "add")
|
||
//fgHTML = "<div style=\"overflow: auto;\"><table id='tblFillGrid" + dcNo + "' class='gridData customSetupTableMN'><thead><tr><th width=\"15\"><input type=checkbox name='chkall' class='fgHdrChk' id='chkall' onclick=\"javascript:CheckAll(this,'t');\" ></th>" + headRow + "</tr></thead><tbody>" + fgRows + "</tbody></table>";
|
||
fgHTML = "<div><table id='tblFillGrid" + dcNo + "' class='gridData customSetupTableMN'><thead><tr><th width=\"15\"><input type=checkbox name='chkall' class='fgHdrChk' id='chkall' onclick=\"javascript:CheckAll(this,'t');\" ></th>" + headRow + "</tr></thead><tbody>" + fgRows + "</tbody></table>";
|
||
else
|
||
//fgHTML = "<div style=overflow: auto;\"><table id='tblFillGrid" + dcNo + "' class='gridData customSetupTableMN'><thead><tr><th width=\"15\"><input type=checkbox name='chkall' class='fgHdrChk' id='chkall' onclick=\"javascript:CheckAll(this,'t');\" ></th>" + headRow + "</tr></thead><tbody>" + fgRows + "</tbody></table>";
|
||
fgHTML = "<div><table id='tblFillGrid" + dcNo + "' class='gridData customSetupTableMN'><thead><tr><th width=\"15\"><input type=checkbox name='chkall' class='fgHdrChk' id='chkall' onclick=\"javascript:CheckAll(this,'t');\" ></th>" + headRow + "</tr></thead><tbody>" + fgRows + "</tbody></table>";
|
||
if (src == "add")
|
||
fgHTML += "<div><center><input class='hotbtn btn' type='button' value='Ok' onclick=\"javascript:ProcessAddGroup('" + dcNo + "')\"/></center></div></div>";
|
||
else
|
||
{
|
||
if (dc.Action == "")
|
||
fgHTML += "<div><center><input class='hotbtn btn' type='button' value='Ok' onclick=\"javascript:ProcessFormatStaticFill('" + dcNo + "')\"/></center></div></div>";
|
||
else
|
||
fgHTML += "<div><center><input class='hotbtn btn' type='button' value='Ok' onclick=\"javascript:ProcessFormatFill('" + dcNo + "')\"/></center></div></div>";
|
||
}
|
||
}
|
||
else
|
||
fgHTML = "<label>" + Constants.REC_NOT_FOUND + "</label>";
|
||
|
||
return fgHTML;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Function to check if the key column value already exists in the field arrays.
|
||
/// </summary>
|
||
/// <param name="keyColName"></param>
|
||
/// <param name="dcNo"></param>
|
||
/// <param name="currFldvalue"></param>
|
||
/// <returns></returns>
|
||
public bool IsDupKeyColValue(string keyColName, string dcNo, string currFldvalue)
|
||
{
|
||
bool IsDupValue = false;
|
||
|
||
int rCnt = GetDcRowCount(dcNo);
|
||
|
||
for (int i = 1; i <= rCnt; i++)
|
||
{
|
||
string FldValue = string.Empty;
|
||
if (DSGetRow(i.ToString(), Convert.ToInt32(dcNo))[keyColName] != null)
|
||
FldValue = DSGetRow(i.ToString(), Convert.ToInt32(dcNo))[keyColName].ToString();
|
||
|
||
if (FldValue == currFldvalue)
|
||
{
|
||
IsDupValue = true;
|
||
break;
|
||
}
|
||
}
|
||
|
||
return IsDupValue;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Function to return the index of the fill grid from the fill grid struct.
|
||
/// </summary>
|
||
/// <param name="dcNo"></param>
|
||
/// <returns></returns>
|
||
private int GetDcFillGridIndex(string dcName, string fillGridName)
|
||
{
|
||
if (fillGridName == string.Empty)
|
||
{
|
||
for (int i = 0; i < tstStrObj.fgs.Count; i++)
|
||
{
|
||
TStructDef.FGStruct fg = (TStructDef.FGStruct)tstStrObj.fgs[i];
|
||
if (fg.fgtargetdc.ToLower() == dcName.ToLower())
|
||
{
|
||
return i;
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
for (int i = 0; i < tstStrObj.fgs.Count; i++)
|
||
{
|
||
TStructDef.FGStruct fg = (TStructDef.FGStruct)tstStrObj.fgs[i];
|
||
if (fg.fgName.ToLower() == fillGridName.ToLower())
|
||
{
|
||
return i;
|
||
}
|
||
}
|
||
}
|
||
return -1;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Function to construct the fill grid pop up html for the given dc.
|
||
/// </summary>
|
||
/// <param name="iXml"></param>
|
||
/// <param name="dcNo"></param>
|
||
/// <param name="strObj"></param>
|
||
/// <param name="tstData"></param>
|
||
/// <param name="src"></param>
|
||
/// <returns></returns>
|
||
public string ConstructFillGrid(string iXml, string dcNo, string fgName, TStructDef strObj, TStructData tstData, string src, string expResult)
|
||
{
|
||
string fgHTML = "";
|
||
expResult = expResult.ToLower();
|
||
string chkChecked = string.Empty;
|
||
|
||
if (expResult == "t" || expResult == "true")
|
||
//TODO: to avoid default selection of all items, we have made it unchecked always
|
||
//chkChecked = "checked";
|
||
chkChecked = "";
|
||
else
|
||
chkChecked = "";
|
||
|
||
if (iXml.Contains(Constants.ERROR))
|
||
{
|
||
string errMsg = tstData.GetErrorInResultJson(iXml);
|
||
if (errMsg != "")
|
||
fgHTML = "<label>" + errMsg + "</label>";
|
||
else
|
||
fgHTML = "<label>" + Constants.REC_NOT_FOUND + "</label>";
|
||
}
|
||
else
|
||
{
|
||
XmlDocument xmlDoc = new XmlDocument();
|
||
xmlDoc.LoadXml(iXml);
|
||
int m = 0;
|
||
string fgRows = "";
|
||
bool allrowSelected = false;
|
||
string cRows = "";
|
||
string headRow = "";
|
||
string chkboxVal = "";
|
||
string fgtlhw = "";
|
||
int colcount = 0;
|
||
XmlNodeList headNodes;
|
||
List<string> headerCaption = new List<string>();
|
||
List<string> headerNode = new List<string>();
|
||
int hdrCnt = 0;
|
||
headNodes = xmlDoc.SelectNodes("//response/headrow");
|
||
foreach (XmlNode resNode in headNodes)
|
||
{
|
||
if (resNode.Attributes["tlhw"] != null)
|
||
{
|
||
fgtlhw = resNode.Attributes["tlhw"].Value;
|
||
}
|
||
XmlNodeList headers = resNode.ChildNodes;
|
||
foreach (XmlNode hdrNode in headers)
|
||
{
|
||
for (int i = 0; i < strObj.fgs.Count; i++)
|
||
{
|
||
TStructDef.FGStruct fg = (TStructDef.FGStruct)strObj.fgs[i];
|
||
if (fg.fgtargetdc == "dc" + dcNo && fg.fgName == fgName)
|
||
{
|
||
string colWidth = "50";
|
||
if (hdrNode.Attributes["width"] != null)
|
||
{
|
||
colWidth = hdrNode.Attributes["width"].Value;
|
||
}
|
||
// string colWidth = strObj.GetColumnWidth(dcNo, fg.fgDcFldName[j].ToString());
|
||
//string colWidth = strObj.GetColumnWidth(dcNo, hdrNode.Name);
|
||
if (!string.IsNullOrEmpty(hdrNode.InnerText) && (hdrNode.InnerText.ToLower() == "hide" || hdrNode.InnerText.ToLower().StartsWith("hide_")))
|
||
headRow = headRow + "<th style='display:none;'>" + hdrNode.InnerText + "</th>";
|
||
else
|
||
headRow = headRow + "<th width=\"" + colWidth + "\">" + hdrNode.InnerText + "</th>";
|
||
headerCaption.Add(hdrNode.InnerText);
|
||
headerNode.Add(hdrNode.Name);
|
||
hdrCnt++;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
DataTable fgData = dsDataSet.Tables["dc" + dcNo];
|
||
XmlNodeList dataNodes;
|
||
dataNodes = xmlDoc.SelectNodes("//response/row");
|
||
string fgCondition = string.Empty; //APPEND
|
||
foreach (XmlNode dataNode in dataNodes)
|
||
{
|
||
XmlNodeList baseDataNodes = dataNode.ChildNodes;
|
||
ArrayList ExitFld = new ArrayList();
|
||
ArrayList ExitFldVal = new ArrayList();
|
||
foreach (XmlNode baseDataNode in baseDataNodes)
|
||
{
|
||
|
||
colcount = colcount + 1;
|
||
|
||
for (int i = 0; i < strObj.fgs.Count; i++)
|
||
{
|
||
TStructDef.FGStruct fg = (TStructDef.FGStruct)strObj.fgs[i];
|
||
if (fg.fgtargetdc == "dc" + dcNo && fg.fgName == fgName)
|
||
{
|
||
fgCondition = fg.FGCondition;
|
||
string strVal = CheckSpecialChars(baseDataNode.InnerText);
|
||
for (int j = 0; j < fg.fgSqlFldName.Count; j++)
|
||
{
|
||
if (fg.fgSqlFldName[j].ToString().ToLower() == baseDataNode.Name.ToLower())
|
||
{
|
||
ExitFld.Add(fg.fgDcFldName[j]);
|
||
ExitFldVal.Add(strVal);
|
||
break;
|
||
}
|
||
}
|
||
if (headerNode.IndexOf(baseDataNode.Name) != -1 && !string.IsNullOrEmpty(headerCaption[headerNode.IndexOf(baseDataNode.Name)]) && (headerCaption[headerNode.IndexOf(baseDataNode.Name)].ToLower() == "hide" || headerCaption[headerNode.IndexOf(baseDataNode.Name)].ToLower().StartsWith("hide_")))
|
||
cRows = cRows + "<td style='display:none;'><label>" + strVal + "</label></td>";
|
||
else
|
||
cRows = cRows + "<td class='fgData'><label>" + strVal + "</label></td>";
|
||
|
||
if (fg.fgSqlFldName.IndexOf(baseDataNode.Name.ToLower()) != -1)
|
||
{
|
||
if (chkboxVal == "")
|
||
chkboxVal = baseDataNode.Name + "♣" + strVal;
|
||
else
|
||
chkboxVal += "¿" + baseDataNode.Name + "♣" + strVal;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if (fgData.Rows.Count > 0 && fgCondition == "APPEND")
|
||
{
|
||
bool rowExit = false;
|
||
var fgData1 = fgData;
|
||
for (int i = 0; i < ExitFld.Count; i++)
|
||
{
|
||
try
|
||
{
|
||
fgData1 = fgData1.AsEnumerable().Where(r => r.Field<string>(ExitFld[i].ToString()) == ExitFldVal[i].ToString()).CopyToDataTable();
|
||
rowExit = true;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
rowExit = false;
|
||
break;
|
||
}
|
||
}
|
||
if (!rowExit)
|
||
fgRows = fgRows + "<tr><td width='15'><span class=tem1><input class='fgChk' type=checkbox " + chkChecked + " name='chkItem' " + m + " value=\"" + chkboxVal + "\" onclick='javascript:ChkHdrCheckbox(this," + "\"" + expResult + "\"" + ");' ></span></td>" + cRows + "</tr>";
|
||
else
|
||
allrowSelected = true;
|
||
}
|
||
else
|
||
fgRows = fgRows + "<tr><td width='15'><span class=tem1><input class='fgChk' type=checkbox " + chkChecked + " name='chkItem' " + m + " value=\"" + chkboxVal + "\" onclick='javascript:ChkHdrCheckbox(this," + "\"" + expResult + "\"" + ");' ></span></td>" + cRows + "</tr>";
|
||
cRows = "";
|
||
chkboxVal = "";
|
||
|
||
}
|
||
if (fgRows.ToString() != "")
|
||
{
|
||
//fgHTML = "<div style=\"overflow: auto;\"><table id='tblFillGrid" + dcNo + "' class='gridData customSetupTableMN'><thead><tr><th width=\"15\"><input type=checkbox name='chkall' class='fgHdrChk' id='chkall' " + chkChecked + " onclick=\"javascript:CheckAll(this, " + "'" + expResult + "'" + ");\" ></th>" + headRow + "</tr></thead><tbody>" + fgRows + "</tbody></table>";
|
||
fgHTML = "<div><table id='tblFillGrid" + dcNo + "' class='gridData customSetupTableMN'><thead><tr><th width=\"15\"><input type=checkbox name='chkall' class='fgHdrChk' id='chkall' " + chkChecked + " onclick=\"javascript:CheckAll(this, " + "'" + expResult + "'" + ");\" ></th>" + headRow + "</tr></thead><tbody>" + fgRows + "</tbody></table>";
|
||
fgHTML += "</div>";
|
||
fgHTML += "*♠*" + fgtlhw;
|
||
}
|
||
else if (allrowSelected)
|
||
fgHTML = "<label>" + Constants.SEL_ROWS_FOUND + "</label>";
|
||
else
|
||
fgHTML = "<label>" + Constants.REC_NOT_FOUND + "</label>";
|
||
|
||
}
|
||
return fgHTML;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Function to get the fill grid data for the selected rows in the fill grid pop up.
|
||
/// </summary>
|
||
/// <param name="tstData"></param>
|
||
/// <param name="fldArray"></param>
|
||
/// <param name="fldDbRowNo"></param>
|
||
/// <param name="fldValueArray"></param>
|
||
/// <param name="fldDeletedArray"></param>
|
||
/// <param name="frameNo"></param>
|
||
/// <param name="s"></param>
|
||
/// <returns></returns>
|
||
public string CallGetFillGridWS(TStructData tstData, ArrayList fldArray, ArrayList fldDbRowNo, ArrayList fldValueArray, ArrayList fldDeletedArray, string frameNo, string s)
|
||
{
|
||
DateTime stTime = DateTime.Now;
|
||
string result = null;
|
||
string dcNo = frameNo;
|
||
//GetGlobalVars();
|
||
frameNo = Convert.ToString(Convert.ToInt32(frameNo) + 1);
|
||
transid = tstData.transid.ToString();
|
||
ires = tstStrObj.structRes;
|
||
//tstData.GetFieldValueXml(fldArray, fldDbRowNo, fldValueArray, fldDeletedArray, frameNo, "FillGrid", "NG", dcNo);
|
||
tstData.GetPerfFieldValueXml(fldArray, fldDbRowNo, fldValueArray, fldDeletedArray, frameNo, "FillGrid", "NG", dcNo);
|
||
s += "<FieldList>" + WsPerfAddRowLoadDc(dcNo, "FillGrid") + memVarsData + "</FieldList>" + HttpContext.Current.Session["axApps"].ToString();
|
||
s += HttpContext.Current.Application["axProps"].ToString() + HttpContext.Current.Session["axGlobalVars"].ToString() + HttpContext.Current.Session["axUserVars"].ToString() + "</sqlresultset>";
|
||
//Call service
|
||
objWebServiceExt = new ASBExt.WebServiceExt();
|
||
DateTime asStart = DateTime.Now;
|
||
|
||
string isRapidCall = "false";
|
||
if ((HttpContext.Current.Session["RapidTsTruct"] != null && HttpContext.Current.Session["RapidTsTruct"].ToString() == "true") && (HttpContext.Current.Session["AxIsPerfCode"] != null && HttpContext.Current.Session["AxIsPerfCode"].ToString().ToLower() == "true"))
|
||
isRapidCall = "true";
|
||
if (isRapidCall == "true")
|
||
{
|
||
s = AddToken(s);
|
||
result = objWebServiceExt.CallRapidDoFillGridValuesWS(transid, s);
|
||
}
|
||
else
|
||
{
|
||
result = objWebServiceExt.CallDoFillGridValuesWS(transid, s, ires);
|
||
}
|
||
|
||
DateTime asEnd = DateTime.Now;
|
||
|
||
if (logTimeTaken)
|
||
{
|
||
webTime1 = asStart.Subtract(stTime).TotalMilliseconds;
|
||
webTime2 = DateTime.Now.Subtract(asEnd).TotalMilliseconds;
|
||
asbTime = asEnd.Subtract(asStart).TotalMilliseconds;
|
||
}
|
||
return result;
|
||
}
|
||
|
||
public string CallCreatePDFWS(string s)
|
||
{
|
||
string news = GetTraceString(s);
|
||
if (news != "") s = news;
|
||
s = s + HttpContext.Current.Session["axApps"].ToString() + HttpContext.Current.Application["axProps"].ToString() + HttpContext.Current.Session["axGlobalVars"].ToString() + HttpContext.Current.Session["axUserVars"].ToString() + "</root>";
|
||
string result = null;
|
||
//Call service
|
||
objWebServiceExt = new ASBExt.WebServiceExt();
|
||
result = objWebServiceExt.CallCreatePDFWS(transid, s);
|
||
return result;
|
||
}
|
||
|
||
public string CallCreateFastPDFWS(string s)
|
||
{
|
||
string news = GetTraceString(s);
|
||
if (news != "") s = news;
|
||
s += HttpContext.Current.Session["axApps"].ToString() + HttpContext.Current.Application["axProps"].ToString() + HttpContext.Current.Session["axGlobalVars"].ToString() + HttpContext.Current.Session["axUserVars"].ToString() + "</root>";
|
||
string result = null;
|
||
//Call service
|
||
objWebServiceExt = new ASBExt.WebServiceExt();
|
||
result = objWebServiceExt.CallCreateFastPDFWS(transid, s, tstStrObj.structRes);
|
||
return result;
|
||
}
|
||
|
||
public string CallViewAttachWS(string s, string structXml)
|
||
{
|
||
string result = string.Empty;
|
||
//Call service
|
||
objWebServiceExt = new ASBExt.WebServiceExt();
|
||
try
|
||
{
|
||
if (attachDir)
|
||
result = GetViewAttachment(s);
|
||
if (result == string.Empty)
|
||
result = objWebServiceExt.CallViewAttachmentsWS(transid, s, structXml);
|
||
|
||
if (result != string.Empty)
|
||
{
|
||
JObject res = null;
|
||
JArray command = null;
|
||
try
|
||
{
|
||
res = JObject.Parse(result);
|
||
command = (JArray)res["command"];
|
||
JObject item = (JObject)command[0];
|
||
item.Add(new JProperty("isatt", "T"));
|
||
result = res.ToString();
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
result = ex.Message;
|
||
}
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
result = ex.Message;
|
||
}
|
||
return result;
|
||
}
|
||
|
||
//copy files from local to script
|
||
public string GetViewAttachment(string inputXML)
|
||
{
|
||
string result = string.Empty;
|
||
//CommonDir directory creation taken back due to application server memory usage.
|
||
//if (!attachDirPath.Contains(":\\") && !attachDirPath.StartsWith("\\"))
|
||
//{
|
||
// CreateDirectoryInCommonDir(ref attachDirPath);
|
||
//}
|
||
|
||
XmlDocument xmlDoc = new XmlDocument();
|
||
xmlDoc.LoadXml(inputXML);
|
||
XmlNode rootNode = default(XmlNode);
|
||
rootNode = xmlDoc.SelectSingleNode("root");
|
||
string fname = string.Empty;
|
||
if (rootNode.Attributes["filename"] != null)
|
||
fname = rootNode.Attributes["filename"].Value;
|
||
else
|
||
return result;
|
||
string srcPath = attachDirPath + "\\" + transid + "\\";
|
||
DirectoryInfo tarDir = new DirectoryInfo(scriptsPath + "Axpert\\" + sessionid);
|
||
DirectoryInfo sPath = new DirectoryInfo(srcPath);
|
||
try
|
||
{
|
||
if (!tarDir.Exists)
|
||
tarDir.Create();
|
||
if (sPath.Exists)
|
||
{
|
||
string[] sFileName = Directory.GetFiles(srcPath, recordid + "-" + fname);
|
||
string authenticationStatus = string.Empty;
|
||
if (util.GetAuthentication(ref authenticationStatus))
|
||
{
|
||
foreach (var file in sFileName)
|
||
{
|
||
string fileName = Path.GetFileName(file);
|
||
File.Copy(file, Path.Combine(tarDir.ToString(), fileName.Substring(fileName.IndexOf("-") + 1)), true);
|
||
}
|
||
}
|
||
result = "{\"command\":[{\"cmd\":\"openfile\",\"cmdval\":\"" + fname + "\"}]}";
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
result = ex.Message;
|
||
}
|
||
return result;
|
||
}
|
||
//Remove the file from dir
|
||
public string RemoveAttachFromDir(string inputXML)
|
||
{
|
||
string myPath = attachDirPath + "\\" + transid + "\\";
|
||
string result = string.Empty;
|
||
DirectoryInfo dir = new DirectoryInfo(myPath);
|
||
if (inputXML != string.Empty)
|
||
{
|
||
XmlDocument xmlDoc = new XmlDocument();
|
||
xmlDoc.LoadXml(inputXML);
|
||
XmlNode rootNode = default(XmlNode);
|
||
rootNode = xmlDoc.SelectSingleNode("root");
|
||
string fname = string.Empty;
|
||
if (rootNode.Attributes["filename"] != null)
|
||
fname = rootNode.Attributes["filename"].Value;
|
||
else
|
||
return result;
|
||
if (dir.Exists && !string.IsNullOrEmpty(fname))
|
||
{
|
||
removeFiles.Add(recordid + "-" + fname);
|
||
result = "{\"message\":[{\"msg\":\"done\"}]}";
|
||
}
|
||
return result;
|
||
}
|
||
else
|
||
{
|
||
try
|
||
{
|
||
if (dir.Exists)
|
||
dir.Delete(true);
|
||
return result;
|
||
}
|
||
catch { return result; }
|
||
}
|
||
}
|
||
|
||
public string RemoveAttachFromServer(string inputXML, string stransId)
|
||
{
|
||
string result = string.Empty;
|
||
XmlDocument xml = new XmlDocument();
|
||
xml.LoadXml(inputXML);
|
||
XmlElement root = xml.DocumentElement;
|
||
string recordid = string.Empty;
|
||
if (root.HasAttribute("recordid"))
|
||
recordid = root.GetAttribute("recordid");
|
||
if (imgAttachPath != "" && recordid != "0")
|
||
{
|
||
for (int i = 0; i < tstStrObj.flds.Count; i++)
|
||
{
|
||
TStructDef.FieldStruct fld = (TStructDef.FieldStruct)tstStrObj.flds[i];
|
||
if (fld.fieldIsImage)
|
||
{
|
||
if (!IsDcGrid(fld.fldframeno.ToString(), tstStrObj) && !fld.name.StartsWith("axp_nga_"))
|
||
{
|
||
string strDest = imgAttachPath + "\\" + transid + "\\" + fld.name;
|
||
string authenticationStatus = string.Empty;
|
||
if (util.GetAuthentication(ref authenticationStatus))
|
||
{
|
||
DirectoryInfo di = new DirectoryInfo(strDest);
|
||
if (di.Exists)
|
||
{
|
||
FileInfo[] files = di.GetFiles();
|
||
if (files.Length > 0)
|
||
{
|
||
var ImgExist = files.Where(x => x.Name.Split('.')[0] == recordid).ToList();
|
||
if (ImgExist.Count > 0)
|
||
{
|
||
foreach (var lstImg in ImgExist)
|
||
{
|
||
FileInfo file = (FileInfo)lstImg;
|
||
file.Delete();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
else if (fld.name.StartsWith("axp_nga_"))
|
||
{
|
||
string strDest = imgAttachPath + "\\" + transid + "\\" + fld.name;
|
||
string authenticationStatus = string.Empty;
|
||
if (util.GetAuthentication(ref authenticationStatus))
|
||
{
|
||
DirectoryInfo di = new DirectoryInfo(strDest);
|
||
if (di.Exists)
|
||
{
|
||
FileInfo[] files = di.GetFiles();
|
||
if (files.Length > 0)
|
||
{
|
||
var ImgExist = files.Where(x => x.Name.StartsWith(recordid + "-")).ToList();
|
||
if (ImgExist.Count > 0)
|
||
{
|
||
foreach (var lstImg in ImgExist)
|
||
{
|
||
FileInfo file = (FileInfo)lstImg;
|
||
file.Delete();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if ((fld.name.StartsWith("dc") && fld.name.ToLower().EndsWith("_image") || fld.name.StartsWith("axp_gridattach_")) && IsDcGrid(fld.fldframeno.ToString(), tstStrObj))
|
||
{
|
||
TStructDef.DcStruct dc = (TStructDef.DcStruct)tstStrObj.dcs[fld.fldframeno - 1];
|
||
string fldName = fld.name;
|
||
string grdAttPath = HttpContext.Current.Session["grdAttPath"].ToString();
|
||
|
||
if (dc.DCHasDataRows && grdAttPath != string.Empty)
|
||
{
|
||
if (!grdAttPath.EndsWith("\\"))
|
||
grdAttPath = grdAttPath + "\\";
|
||
|
||
string destFilePath = destFilePath = grdAttPath + "\\" + stransId + "\\" + fld.name;
|
||
string authenticationStatus = string.Empty;
|
||
if (util.GetAuthentication(ref authenticationStatus))
|
||
{
|
||
DirectoryInfo di = new DirectoryInfo(destFilePath);
|
||
if (di.Exists)
|
||
{
|
||
FileInfo[] files = di.GetFiles();
|
||
if (files.Length > 0)
|
||
{
|
||
var ImgExist = files.Where(x => x.Name.StartsWith(recordid + "-")).ToList();
|
||
if (ImgExist.Count > 0)
|
||
{
|
||
foreach (var lstImg in ImgExist)
|
||
{
|
||
FileInfo file = (FileInfo)lstImg;
|
||
file.Delete();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if (attachDirPath != "" && recordid != "0")
|
||
{
|
||
string strDest = imgAttachPath + "\\" + stransId;
|
||
DirectoryInfo di = new DirectoryInfo(strDest);
|
||
if (di.Exists)
|
||
{
|
||
FileInfo[] files = di.GetFiles();
|
||
if (files.Length > 0)
|
||
{
|
||
var ImgExist = files.Where(x => x.Name.StartsWith(recordid + "-")).ToList();
|
||
if (ImgExist.Count > 0)
|
||
{
|
||
foreach (var lstImg in ImgExist)
|
||
{
|
||
FileInfo file = (FileInfo)lstImg;
|
||
file.Delete();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
|
||
public string CallRemoveAttachWS(string s, string structXml)
|
||
{
|
||
string news = GetTraceString(s);
|
||
if (news != "") s = news;
|
||
s = s + HttpContext.Current.Session["axApps"].ToString() + HttpContext.Current.Application["axProps"].ToString() + HttpContext.Current.Session["axGlobalVars"].ToString() + HttpContext.Current.Session["axUserVars"].ToString() + "</root>";
|
||
string result = null;
|
||
//Call service
|
||
objWebServiceExt = new ASBExt.WebServiceExt();
|
||
s = util.CheckReverseUrlSpecialChars(s);
|
||
if (attachDir)
|
||
result = RemoveAttachFromDir(s);
|
||
if (string.IsNullOrEmpty(result))
|
||
result = objWebServiceExt.CallRemoveAttachmentsWS(transid, s, structXml);
|
||
return result;
|
||
}
|
||
|
||
//This function creates new directories inside the 'CommonDir' folder in web server.
|
||
public void CreateDirectoryInCommonDir(ref String dirPath)
|
||
{
|
||
dirPath = AppDomain.CurrentDomain.BaseDirectory + "CommonDir\\" + dirPath;
|
||
if (!Directory.Exists(dirPath))
|
||
{
|
||
Directory.CreateDirectory(dirPath);
|
||
}
|
||
}
|
||
|
||
private string GetTraceString(string currentXml)
|
||
{
|
||
string traceVal = string.Empty;
|
||
traceVal = currentXml;
|
||
if (currentXml.Contains("_#") == true)
|
||
{
|
||
currentXml = currentXml.Replace("_#", "~");
|
||
}
|
||
|
||
string filename = string.Empty;
|
||
int sindex = currentXml.IndexOf(Constants.TRACESPLITSTR2);
|
||
int eindex = currentXml.LastIndexOf(Constants.TRACESPLITSTR1);
|
||
|
||
if (sindex != -1 && eindex != -1)
|
||
{
|
||
filename = currentXml.Substring(sindex + 2, eindex - sindex - 2);
|
||
sessionid = HttpContext.Current.Session["nsessionid"].ToString();
|
||
errlog = logobj.CreateLog("Executing Action", sessionid, filename, "new");
|
||
traceVal = currentXml.Replace(Constants.TRACESPLITSTR2 + filename + Constants.TRACESPLITSTR1, errlog);
|
||
}
|
||
|
||
if (traceVal.Contains("~") == true)
|
||
{
|
||
traceVal = traceVal.Replace("~", "_#");
|
||
}
|
||
if (scriptsPath != string.Empty)
|
||
{
|
||
traceVal = traceVal.Replace("<root", "<root scriptpath=" + '"' + scriptsPath + '"');
|
||
}
|
||
if (traceVal != null && traceVal != "")// Reddy
|
||
{
|
||
if (traceVal.TrimStart().StartsWith("<root "))
|
||
{
|
||
traceVal = traceVal.Replace("<root", "<root appsessionkey='" + HttpContext.Current.Session["AppSessionKey"].ToString() + "' username='" + HttpContext.Current.Session["username"].ToString() + "'");
|
||
}
|
||
else if (traceVal.TrimStart().StartsWith("<sqlresultset "))
|
||
{
|
||
traceVal = traceVal.Replace("<sqlresultset", "<sqlresultset appsessionkey='" + HttpContext.Current.Session["AppSessionKey"].ToString() + "' username='" + HttpContext.Current.Session["username"].ToString() + "'");
|
||
}
|
||
else if (traceVal.TrimStart().StartsWith("<Transaction "))
|
||
{
|
||
traceVal = traceVal.Replace("<Transaction", "<Transaction appsessionkey='" + HttpContext.Current.Session["AppSessionKey"].ToString() + "' username='" + HttpContext.Current.Session["username"].ToString() + "'");
|
||
}
|
||
}
|
||
|
||
return traceVal;
|
||
}
|
||
|
||
public string GetAxFormDetails()
|
||
{
|
||
string frmDetails = string.Empty;
|
||
string trace = HttpContext.Current.Session["AxTrace"].ToString();
|
||
frmDetails = "<script type='text/javascript'>";
|
||
frmDetails += "function GetFormDetails() { var a = '" + project + "';var b='" + user + "';var c='" + transactionID + "';var d='" + sessionid + "';var e = '" + AxRole + "';var f='" + trace + "';SetTstProps(a,b,c,d,e,f);}";
|
||
frmDetails += "</script>";
|
||
|
||
return frmDetails;
|
||
}
|
||
|
||
public string CallGetFormLoad(TStructData tstData, string errorLog)
|
||
{
|
||
string result = null;
|
||
string visibleDCs = string.Empty;
|
||
visibleDCs = tstStrObj.GetVisibleDCs();
|
||
string loadXml = "<root axpapp='" + HttpContext.Current.Session["project"].ToString() + "' sessionid='" + HttpContext.Current.Session["nsessionid"].ToString() + "' transid='" + tstData.transid + "' recordid='" + rid + "' dcname='" + visibleDCs + "' trace='" + errorLog + "' appsessionkey='" + HttpContext.Current.Session["AppSessionKey"].ToString() + "' username='" + HttpContext.Current.Session["username"].ToString() + "'>";
|
||
loadXml += HttpContext.Current.Session["axApps"].ToString() + HttpContext.Current.Application["axProps"].ToString() + HttpContext.Current.Session["axGlobalVars"].ToString() + HttpContext.Current.Session["axUserVars"].ToString();
|
||
loadXml += "</root>";
|
||
objWebServiceExt = new ASBExt.WebServiceExt();
|
||
result = objWebServiceExt.CallDoFormLoadWS(tstData.transid, loadXml, tstStrObj.structRes);
|
||
//requestProcess_logtime += loadRes.Split('♠')[0];
|
||
result = result.Split('♠')[1];
|
||
return result;
|
||
}
|
||
|
||
public string CallGetLoadData(TStructData tstData, string recordid, string errorLog)
|
||
{
|
||
string result = null;
|
||
string visibleDCs = string.Empty;
|
||
visibleDCs = tstStrObj.GetVisibleDCs();
|
||
string proj = HttpContext.Current.Session["project"].ToString();
|
||
string imagefromdb = "false";
|
||
if (HttpContext.Current.Session["AxpSaveImageDb"] != null)
|
||
imagefromdb = HttpContext.Current.Session["AxpSaveImageDb"].ToString();
|
||
string loadXml = "<root imagefromdb='" + imagefromdb + "' axpapp = '" + proj + "' sessionid = '" + HttpContext.Current.Session["nsessionid"].ToString() + "' appsessionkey = '" + HttpContext.Current.Session["AppSessionKey"].ToString() + "' username = '" + HttpContext.Current.Session["username"].ToString() + "' transid = '" + tstData.transid + "' recordid = '" + recordid + "' dcname = '" + visibleDCs + "' trace = '" + errorLog + "' > ";
|
||
loadXml += HttpContext.Current.Session["axApps"].ToString() + HttpContext.Current.Application["axProps"].ToString() + HttpContext.Current.Session["axGlobalVars"].ToString() + HttpContext.Current.Session["axUserVars"].ToString();
|
||
loadXml += "</root>";
|
||
loadXml = util.ReplaceImagePath(loadXml);
|
||
string tsId = tstData.transid;
|
||
string sXml = tstStrObj.structRes;
|
||
objWebServiceExt = new ASBExt.WebServiceExt();
|
||
result = objWebServiceExt.CallLoadDataWS(tsId, loadXml, sXml, recordid, proj);
|
||
HttpContext.Current.Session["axp_lockonrecid"] = tsId + "~" + recordid;
|
||
return result;
|
||
}
|
||
#endregion
|
||
|
||
#region Private Methods
|
||
|
||
/// <summary>
|
||
/// Function to update the decimal value for the given field in the structure xml
|
||
/// </summary>
|
||
/// <param name="fieldName"></param>
|
||
/// <param name="dec"></param>
|
||
private void UpdateAxpCurrDec(string[] fieldNames, int dec)
|
||
{
|
||
XmlDocument xmlDoc = new XmlDocument();
|
||
xmlDoc.LoadXml(tstStrObj.structRes);
|
||
XmlNodeList fieldNode;
|
||
//looping from i=1 as the first item is decimal
|
||
for (int i = 1; i < fieldNames.Length; i++)
|
||
{
|
||
fieldNode = xmlDoc.GetElementsByTagName(fieldNames[i].ToString().Trim());
|
||
if (fieldNode.Count > 0)
|
||
{
|
||
foreach (XmlNode childNode in fieldNode[0].ChildNodes)
|
||
{
|
||
if (childNode.Name == "a5")
|
||
{
|
||
childNode.InnerText = dec.ToString();
|
||
tstStrObj.structRes = xmlDoc.OuterXml;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// Function to check if the field is axpcurrencydec and call update struct xml
|
||
/// </summary>
|
||
/// <param name="fldName"></param>
|
||
/// <param name="fldVal"></param>
|
||
private void CheckAxpCurrDec(string fldName, string fldVal)
|
||
{
|
||
string[] axpCurrDetails = new string[] { };
|
||
axpCurrDetails = fldVal.Split(',');
|
||
if (axpCurrDetails.Length > 0 && fldVal != "")
|
||
{
|
||
int decNo = Convert.ToInt32(axpCurrDetails[0]);
|
||
UpdateAxpCurrDec(axpCurrDetails, decNo);
|
||
}
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// Function which loads the given image from the image folder to scripts.
|
||
/// On change of the product, if the image should be replaced, this function is called.
|
||
/// </summary>
|
||
/// <param name="imageName"></param>
|
||
/// <param name="imageSrc"></param>
|
||
/// <returns>It returns the imagename along with the source value for the image, which is set in the client function</returns>
|
||
public string GetImageSource(string imageName, string imageSrc)
|
||
{
|
||
if (imageSrc != "")
|
||
{
|
||
string[] fvalues = imageSrc.ToString().Split('~');
|
||
string recordId = fvalues[2].ToString();
|
||
imageFldNames.Clear();
|
||
imageFldSrc.Clear();
|
||
LoadImageToFolder(imageName, recordId);
|
||
|
||
|
||
string imgSrc = "";
|
||
for (int i = 0; i < imageFldNames.Count; i++)
|
||
{
|
||
if (imageFldNames[i].ToString() == imageName)
|
||
{
|
||
imgSrc = imageFldSrc[i].ToString();
|
||
break;
|
||
}
|
||
}
|
||
|
||
return imageName + "♣" + imgSrc;
|
||
}
|
||
return imageFldSrc + "♣" + "";
|
||
}
|
||
|
||
private void CreateFieldValueXmlLoadTab(string frameNo)
|
||
{
|
||
string fValue = string.Empty;
|
||
StringBuilder fldXml = new StringBuilder();
|
||
string curFldFrmNo = "0";
|
||
for (int i = 0; i < fieldName.Count; i++)
|
||
{
|
||
int fIndex = 0;
|
||
fIndex = fieldControlName[i].ToString().LastIndexOf("F");
|
||
fIndex = fIndex + 1;
|
||
curFldFrmNo = fieldControlName[i].ToString().Substring(fIndex, fieldControlName[i].ToString().Length - fIndex);
|
||
|
||
if (Convert.ToInt32(curFldFrmNo) <= Convert.ToInt32(frameNo))
|
||
{
|
||
fldXml.Append("<" + fieldName[i] + ">");
|
||
fValue = CheckSpecialChars(fieldValue[i].ToString());
|
||
fldXml.Append(fValue);
|
||
fldXml.Append("</" + fieldName[i] + ">");
|
||
}
|
||
}
|
||
|
||
fgFieldValueXml = fldXml.ToString();
|
||
}
|
||
private void CreateFieldValueXmlPerf(string frameNum, string ActiveRowNo, ArrayList AxDepFields, string fldDepGridDcs, Dictionary<string, string> includeDcRows, string includeDcs)
|
||
{
|
||
DSFieldValueXMLPerf(frameNum, ActiveRowNo, AxDepFields, fldDepGridDcs, includeDcRows, includeDcs);
|
||
}
|
||
|
||
private void CreateFieldValueXml(string condition, string includeDcs, string calledFrom)
|
||
{
|
||
DSFieldValueXML(condition, includeDcs, calledFrom);
|
||
}
|
||
|
||
private void FieldToXML(string fldName, string rowNo, string value, string oldValue, string idvalue, string oldIdValue, string dcNo, Boolean fldSaveNormal, bool isSubGrid, string subRowNo, TStructDef.FieldStruct fld = new TStructDef.FieldStruct())
|
||
{
|
||
rowNo = GetRowNoHelper(rowNo.ToString());
|
||
value = CheckSpecialChars(value);
|
||
oldValue = CheckSpecialChars(oldValue);
|
||
string oldVal = "";
|
||
if (recordid != "0")
|
||
{
|
||
if (value != oldValue)
|
||
oldVal = "ov='" + oldValue + "'";
|
||
else
|
||
oldVal = "";
|
||
}
|
||
if (fldName.StartsWith(Constants.IMGPrefix))
|
||
return;
|
||
if (fldName.ToLower() == (Constants.AXPIMAGEPATH))
|
||
isAxpImagePath = true;
|
||
//if (fld.datatype != null && fld.datatype.ToLower() == "image" && imgAttachPath != "")
|
||
// return;
|
||
if (fldSaveNormal)
|
||
{
|
||
if (Convert.ToString(idvalue) == "") idvalue = "0";
|
||
if (Convert.ToString(oldIdValue) == "") oldIdValue = "0";
|
||
if (isSubGrid)
|
||
dsDataXML.Append("<" + fldName + " rowno='" + subRowNo + "' id='" + idvalue + "' oldid='" + oldIdValue + "' " + oldVal + ">" + value + "</" + fldName + ">");
|
||
else
|
||
dsDataXML.Append("<" + fldName + " rowno='" + rowNo + "' id='" + idvalue + "' oldid='" + oldIdValue + "' " + oldVal + ">" + value + "</" + fldName + ">");
|
||
}
|
||
else
|
||
{
|
||
if (isSubGrid)
|
||
dsDataXML.Append("<" + fldName + " rowno='" + subRowNo + "' " + oldVal + ">" + value + "</" + fldName + ">");
|
||
else if (fld.fldMultiSelect != null)
|
||
{
|
||
dsDataXML.Append("<" + fldName + " rowno='" + rowNo + "' " + oldVal + " multiselect='true' separator='" + fld.fldMultiSelectSep + "'>" + value + "</" + fldName + ">");
|
||
}
|
||
else
|
||
dsDataXML.Append("<" + fldName + " rowno='" + rowNo + "' " + oldVal + ">" + value + "</" + fldName + ">");
|
||
}
|
||
}
|
||
|
||
private void DSFieldValueXML(string frameNum, string parDcNo, int ParRowNo, string popDcNo, int popRowNo)
|
||
{
|
||
int fNo = -1;
|
||
bool isNumber = false;
|
||
try
|
||
{
|
||
fNo = int.Parse(frameNum);
|
||
isNumber = true;
|
||
frameNum = "F" + frameNum;
|
||
}
|
||
catch
|
||
{
|
||
}
|
||
|
||
dsDataXML.Length = 0;
|
||
|
||
//loop for constructing the field value xml based on the frame no, row no and field order
|
||
foreach (TStructDef.DcStruct dc in tstStrObj.dcs)
|
||
{
|
||
string dcNo = Convert.ToString(dc.frameno);
|
||
|
||
//This condition will construct xml till the given dc if the given number is a frame no,
|
||
//else it will continue and create the xml for all dc's.
|
||
if ((frameNum != "F-1") && (isNumber))
|
||
{
|
||
if (dc.frameno > fNo)
|
||
break;
|
||
}
|
||
|
||
if (dc.isgrid && dc.DCHasDataRows == false)
|
||
continue;
|
||
|
||
DataTable thisDataTable = dsDataSet.Tables["dc" + dcNo];
|
||
string[] dcRange = tstStrObj.GetDcFieldRange(dcNo).Split(',');
|
||
int startIdx = Convert.ToInt32(dcRange[0]);
|
||
int endIdx = Convert.ToInt32(dcRange[1]);
|
||
string subGridRow = string.Empty;
|
||
bool isSubGrid = false;
|
||
|
||
foreach (DataRow dr in thisDataTable.Rows)
|
||
{
|
||
int rowNo = Convert.ToInt32(dr["axp__rowno"]);
|
||
if (dc.frameno.ToString() == parDcNo && rowNo != ParRowNo)
|
||
continue;
|
||
|
||
//Sub-Grid - only the newly added row should be sent in the input xml.
|
||
if (dc.frameno.ToString() == popDcNo && rowNo != popRowNo)
|
||
{
|
||
continue;
|
||
}
|
||
else if (dc.frameno.ToString() == popDcNo)
|
||
{
|
||
subGridRow = "001";
|
||
isSubGrid = true;
|
||
}
|
||
|
||
DSFieldValueXMLHelper(dcNo, rowNo, startIdx, endIdx, dr, isSubGrid, subGridRow);
|
||
}
|
||
}
|
||
|
||
fieldValueXml = dsDataXML.ToString();
|
||
}
|
||
|
||
private void DSFieldValueXMLHelperPerf(string dcNo, int rowNo, int startIdx, int endIdx, DataRow dr, ArrayList depFields)
|
||
{
|
||
DataTable dtOld = dsDataSet.Tables["dc_old" + dcNo];
|
||
DataRow drOld = dtOld.Rows.Find(rowNo);
|
||
|
||
for (int j = startIdx; j <= endIdx; j++)
|
||
{
|
||
TStructDef.FieldStruct fld = (TStructDef.FieldStruct)tstStrObj.flds[j];
|
||
if (depFields.IndexOf(fld.name) == -1)
|
||
continue;
|
||
|
||
string value = string.Empty;
|
||
string oldValue = string.Empty;
|
||
string idValue = string.Empty;
|
||
string oldIdValue = string.Empty;
|
||
|
||
string FldValue = string.Empty;
|
||
|
||
value = dr[fld.name].ToString();
|
||
if (fld.savenormal)
|
||
idValue = dr["id__" + fld.name].ToString();
|
||
|
||
if (drOld != null)
|
||
{
|
||
oldValue = drOld["old__" + fld.name].ToString();
|
||
if (fld.savenormal)
|
||
oldIdValue = drOld["oldid__" + fld.name].ToString();
|
||
}
|
||
|
||
FieldToXML(fld.name, Convert.ToString(rowNo), value, oldValue, idValue, oldIdValue, dcNo, fld.savenormal, false, "");
|
||
}
|
||
}
|
||
|
||
private void DSFieldValueXMLHelper(string dcNo, int rowNo, int startIdx, int endIdx, DataRow dr, bool isSubGrid, string subGridRowNo)
|
||
{
|
||
DataTable dtOld = dsDataSet.Tables["dc_old" + dcNo];
|
||
DataRow drOld = dtOld.Rows.Find(rowNo);
|
||
|
||
for (int j = startIdx; j <= endIdx; j++)
|
||
{
|
||
TStructDef.FieldStruct fld = (TStructDef.FieldStruct)tstStrObj.flds[j];
|
||
string value = string.Empty;
|
||
string oldValue = string.Empty;
|
||
string idValue = string.Empty;
|
||
string oldIdValue = string.Empty;
|
||
|
||
string FldValue = string.Empty;
|
||
|
||
value = dr[fld.name].ToString();
|
||
if (fld.savenormal)
|
||
idValue = dr["id__" + fld.name].ToString();
|
||
|
||
if (drOld != null)
|
||
{
|
||
oldValue = drOld["old__" + fld.name].ToString();
|
||
if (fld.savenormal)
|
||
oldIdValue = drOld["oldid__" + fld.name].ToString();
|
||
}
|
||
////// is save true and rtf check..
|
||
if (isSaveCalled)
|
||
{
|
||
if ((fld.name.Contains("rtf_") || fld.name.Contains("rtfm_") || fld.name.Contains("fr_rtf_")) && fld.name.Contains("_printable"))
|
||
value = ReplaceRTFTagsForPrint(dr[fld.name.Replace("_printable", "")].ToString());
|
||
}
|
||
|
||
FieldToXML(fld.name, Convert.ToString(rowNo), value, oldValue, idValue, oldIdValue, dcNo, fld.savenormal, isSubGrid, subGridRowNo, fld);
|
||
}
|
||
}
|
||
|
||
private void RapidFieldValueXML(string dcNo, int rowNo, int startIdx, int endIdx, DataRow dr, bool isSubGrid, string subGridRowNo, TStructDef.FieldStruct Parfld, string actRow, string calledFrom)
|
||
{
|
||
DataTable dtOld = dsDataSet.Tables["dc_old" + dcNo];
|
||
DataRow drOld = dtOld.Rows.Find(rowNo);
|
||
string[] arrParams;
|
||
if (calledFrom == "Rapid")
|
||
arrParams = Parfld.FldRapidParents.Split(',');
|
||
else
|
||
arrParams = Parfld.FldRapidAllParents.Split(',');
|
||
List<string> lstParams = new List<string>();
|
||
lstParams.AddRange(arrParams);
|
||
|
||
string[] arrParAllRows = Parfld.FldRapidAllRows.Split(',');
|
||
List<string> lstParAllRows = new List<string>();
|
||
lstParAllRows.AddRange(arrParAllRows);
|
||
|
||
for (int j = startIdx; j <= endIdx; j++)
|
||
{
|
||
TStructDef.FieldStruct fld = (TStructDef.FieldStruct)tstStrObj.flds[j];
|
||
int dIdx = -1;
|
||
dIdx = lstParams.IndexOf(fld.name);
|
||
//If the field is not there in the params array, continue the loop
|
||
if (dIdx == -1 && !fld.name.StartsWith("axp_recid")) continue;
|
||
|
||
//If the allrows for the current parent is false, then only if the current dc and parent dc are same row should be constructed for active row else continue
|
||
//arrParAllRows.Length > dIdx - this condition needs to be handled
|
||
if (IsDcGrid(fld.fldframeno.ToString(), tstStrObj) && dIdx != -1 && arrParAllRows.Length > dIdx)
|
||
{
|
||
if (!(fld.fldframeno == Parfld.fldframeno && arrParAllRows[dIdx] == "F" && rowNo.ToString() == actRow)) continue;
|
||
}
|
||
string value = string.Empty;
|
||
string oldValue = string.Empty;
|
||
string idValue = string.Empty;
|
||
string oldIdValue = string.Empty;
|
||
|
||
string FldValue = string.Empty;
|
||
|
||
value = dr[fld.name].ToString();
|
||
if (fld.savenormal)
|
||
idValue = dr["id__" + fld.name].ToString();
|
||
|
||
if (drOld != null)
|
||
{
|
||
oldValue = drOld["old__" + fld.name].ToString();
|
||
if (fld.savenormal)
|
||
oldIdValue = drOld["oldid__" + fld.name].ToString();
|
||
}
|
||
////// is save true and rtf check..
|
||
if (isSaveCalled)
|
||
{
|
||
if ((fld.name.Contains("rtf_") || fld.name.Contains("rtfm_") || fld.name.Contains("fr_rtf_")) && fld.name.Contains("_printable"))
|
||
value = ReplaceRTFTagsForPrint(dr[fld.name.Replace("_printable", "")].ToString());
|
||
}
|
||
|
||
FieldToXML(fld.name, Convert.ToString(rowNo), value, oldValue, idValue, oldIdValue, dcNo, fld.savenormal, isSubGrid, subGridRowNo);
|
||
}
|
||
}
|
||
|
||
|
||
private string ReplaceRTFTagsForPrint(string inpStr)
|
||
{
|
||
// string[] rtfTags = new string[] { "<pre", "<span", "<div", "<ul", "<li", "<ol", "<span", "<blockquote", "<font", "<h1", "<h2", "<h3", "<h4", "<h5", "<p", "<em", "<br" };
|
||
// string[] rtfEndTags = new string[] { "</pre>", "</span>", "</div>", "</ul>", "</li>", "</ol>", "</span>", "</blockquote>", "</font>", "</h1>", "</h2>", "</h3>", "</h4>", "</h5>", "</p>", "</em>", "</br>" };
|
||
|
||
string[] rtfTags = new string[] { "<pre", "<span", "<div", "<ul", "<li", "<ol", "<span", "<blockquote", "<h1", "<h2", "<h3", "<h4", "<h5", "<p", "<em", "<br" };
|
||
string[] rtfEndTags = new string[] { "</pre>", "</span>", "</div>", "</ul>", "</li>", "</ol>", "</span>", "</blockquote>", "</h1>", "</h2>", "</h3>", "</h4>", "</h5>", "</p>", "</em>", "</br>" };
|
||
|
||
for (int i = 0; i < rtfTags.Length; i++)
|
||
while (inpStr.Contains(rtfTags[i]))
|
||
{
|
||
int startIdx = -1;
|
||
int endIdx = -1;
|
||
|
||
startIdx = inpStr.IndexOf(rtfTags[i]);
|
||
endIdx = inpStr.IndexOf(">", startIdx);
|
||
|
||
string replaceStr = string.Empty;
|
||
|
||
string strNode = inpStr.Substring(startIdx, (endIdx - startIdx) + 1);
|
||
//Code to replace <div> with new line in fast report
|
||
if (strNode == "<div>" || strNode == "<li>")
|
||
{
|
||
//replaceStr = "#13#10";
|
||
inpStr = inpStr.Insert(endIdx + 1, "~");
|
||
}
|
||
|
||
inpStr = inpStr.Remove(startIdx, (endIdx + 1) - startIdx);
|
||
inpStr = inpStr.Replace(rtfEndTags[i], replaceStr);
|
||
}
|
||
|
||
string[] rtfSupportedTags = new string[] { "<em", "<i", "<b", "<u", "<strong" };
|
||
|
||
for (int i = 0; i < rtfSupportedTags.Length; i++)
|
||
{
|
||
int startIdx = -1;
|
||
int endIdx = -1;
|
||
while (true)
|
||
{
|
||
startIdx = inpStr.IndexOf(rtfSupportedTags[i], endIdx + 1);
|
||
if (startIdx == -1)
|
||
break;
|
||
|
||
endIdx = inpStr.IndexOf(">", startIdx);
|
||
inpStr = inpStr.Remove(startIdx, (endIdx + 1) - startIdx);
|
||
inpStr = inpStr.Insert(startIdx, rtfSupportedTags[i] + ">");
|
||
endIdx = endIdx - (endIdx - startIdx);
|
||
}
|
||
}
|
||
|
||
inpStr = inpStr.Replace(" ", "");
|
||
inpStr = inpStr.Replace("\n", "~");
|
||
|
||
return inpStr;
|
||
}
|
||
|
||
private void DSFieldValueXML(string frameNum, string calledFrom)
|
||
{
|
||
int fNo = -1;
|
||
bool isNumber = true;
|
||
try
|
||
{
|
||
fNo = int.Parse(frameNum);
|
||
isNumber = true;
|
||
}
|
||
catch
|
||
{
|
||
isNumber = false;
|
||
}
|
||
|
||
if (isNumber)
|
||
frameNum = "F" + frameNum;
|
||
|
||
dsDataXML.Length = 0;
|
||
|
||
//loop for constructing the field value xml based on the frame no, row no and field order
|
||
foreach (TStructDef.DcStruct dc in tstStrObj.dcs)
|
||
{
|
||
string dcNo = Convert.ToString(dc.frameno);
|
||
|
||
//This condition will construct xml till the given dc if the given number is a frame no,
|
||
//else it will continue and create the xml for all dc's.
|
||
if ((frameNum != "F-1") && (isNumber))
|
||
{
|
||
if (calledFrom == "FillGrid")
|
||
{
|
||
//– Only non grid data will be sent in input xml.For all grid dcs only row count will be sent.
|
||
if (dc.isgrid)
|
||
{
|
||
int rCnt = GetDcRowCount(dcNo);
|
||
dsDataXML.Append("<dc" + dcNo + " type=dc >" + rCnt + "</dc" + dcNo + ">");
|
||
continue;
|
||
}
|
||
}
|
||
else if (calledFrom == "LoadDc")
|
||
{
|
||
//Only non grid data and this DC data will be sent as parameter
|
||
if (fNo != dc.frameno || dc.isgrid)
|
||
continue;
|
||
}
|
||
//TODO: why this is empty?
|
||
else if (calledFrom == "GetDep")
|
||
{
|
||
|
||
}
|
||
else
|
||
{
|
||
//NOTE: for a webservice where the frame no is sent, all other grid dcs data should also be sent to the web service.
|
||
if (dc.frameno > fNo && dc.isgrid)
|
||
continue;
|
||
}
|
||
}
|
||
|
||
int rowCnt = 0;
|
||
if (dc.isgrid)
|
||
{
|
||
rowCnt = GetDcRowCount(dcNo);
|
||
if (rowCnt == 0) rowCnt = 1;
|
||
if (calledFrom != "PickList" && dc.DCHasDataRows == false)
|
||
continue;
|
||
}
|
||
|
||
DataTable thisDataTable = dsDataSet.Tables["dc" + dcNo];
|
||
string[] dcRange = tstStrObj.GetDcFieldRange(dcNo).Split(',');
|
||
int startIdx = Convert.ToInt32(dcRange[0]);
|
||
int endIdx = Convert.ToInt32(dcRange[1]);
|
||
|
||
foreach (DataRow dr in thisDataTable.Rows)
|
||
{
|
||
int rowNo = Convert.ToInt32(dr["axp__rowno"]);
|
||
DSFieldValueXMLHelper(dcNo, rowNo, startIdx, endIdx, dr, false, "");
|
||
}
|
||
}
|
||
if (frameNum == "F-1")
|
||
fieldValueXml = dsDataXML.ToString();
|
||
else
|
||
fgFieldValueXml = dsDataXML.ToString();
|
||
|
||
}
|
||
|
||
public void DSRapidFieldValueXML(string frameNo, string actRowNo, string fieldName, string calledFrom, TStructDef.FieldStruct fld)
|
||
{
|
||
dsDataXML = new StringBuilder();
|
||
//loop for constructing the field value xml based on the frame no, row no and field order
|
||
foreach (TStructDef.DcStruct dc in tstStrObj.dcs)
|
||
{
|
||
string dcNo = Convert.ToString(dc.frameno);
|
||
|
||
//This condition will construct xml for all the non grids in the given tstruct,
|
||
//if the includeDcs contains any grid dc then that dc also will be included in the xml construction.
|
||
//TODO:RAPID - Check allrows along with params
|
||
int rowCnt = 0;
|
||
if (dc.isgrid)
|
||
{
|
||
rowCnt = GetDcRowCount(dcNo);
|
||
if (rowCnt == 0) rowCnt = 1;
|
||
//if (calledFrom != "PickList" && dc.DCHasDataRows == false && calledFrom != "RefreshDc")
|
||
// continue;
|
||
}
|
||
|
||
DataTable thisDataTable = dsDataSet.Tables["dc" + dcNo];
|
||
try
|
||
{
|
||
if (calledFrom != "AutoComplete" && calledFrom != "axpbutton")
|
||
{
|
||
DataRow[] rows;
|
||
rows = thisDataTable.Select("axp__isGrdVld" + dcNo + " = 'false'"); // axp__isGrdVld is Column Name
|
||
foreach (DataRow r in rows)
|
||
thisDataTable.Rows.Remove(r);
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
//catch block is not handlink because - we are skipping the rows which does not contains axp__isGrdVld+dcno column
|
||
}
|
||
|
||
string[] dcRange = tstStrObj.GetDcFieldRange(dcNo).Split(',');
|
||
int startIdx = Convert.ToInt32(dcRange[0]);
|
||
int endIdx = Convert.ToInt32(dcRange[1]);
|
||
|
||
foreach (DataRow dr in thisDataTable.Rows)
|
||
{
|
||
int rowNo = Convert.ToInt32(dr["axp__rowno"]);
|
||
if (calledFrom != "AutoComplete" && calledFrom != "axpbutton" && thisDataTable.Columns.Contains(Constants.AXPISROWVALID + dcNo) && dr[Constants.AXPISROWVALID + dcNo].ToString() == "false")
|
||
continue;
|
||
|
||
RapidFieldValueXML(dcNo, rowNo, startIdx, endIdx, dr, false, "", fld, actRowNo, calledFrom);
|
||
|
||
}
|
||
}
|
||
|
||
fieldValueXml = dsDataXML.ToString();
|
||
}
|
||
|
||
/// <summary>
|
||
///
|
||
/// </summary>
|
||
/// <param name="condition">NG</param>
|
||
/// <param name="includeDcs"></param>
|
||
/// <param name="calledFrom"></param>
|
||
public void DSFieldValueXML(string condition, string includeDcs, string calledFrom)
|
||
{
|
||
dsDataXML.Length = 0;
|
||
|
||
ArrayList incGridDcs = new ArrayList();
|
||
if (!string.IsNullOrEmpty(includeDcs))
|
||
{
|
||
string[] incDcs = includeDcs.Split(',');
|
||
for (int idx = 0; idx < incDcs.Length; idx++)
|
||
{
|
||
if (!string.IsNullOrEmpty(incDcs[idx].ToString()))
|
||
{
|
||
incGridDcs.Add(incDcs[idx].ToString());
|
||
if (IsParentDc(incDcs[idx].ToString()))
|
||
{
|
||
ArrayList arrPopDcs = new ArrayList();
|
||
arrPopDcs = GetPopDcsForParent(incDcs[idx].ToString());
|
||
for (int pIdx = 0; pIdx < arrPopDcs.Count; pIdx++)
|
||
{
|
||
if (incGridDcs.IndexOf(arrPopDcs[pIdx].ToString()) == -1)
|
||
incGridDcs.Add(arrPopDcs[pIdx].ToString());
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
string sourceDc = string.Empty;
|
||
ArrayList tabParentFlds = new ArrayList();
|
||
if (calledFrom == "LoadTab" || calledFrom == "FillGrid" || calledFrom == "AutoComplete")
|
||
{
|
||
if (includeDcs != string.Empty)
|
||
{
|
||
TStructDef.DcStruct tabDc = (TStructDef.DcStruct)tstStrObj.dcs[Convert.ToInt32(includeDcs) - 1];
|
||
tabParentFlds = tabDc.tabParentFields;
|
||
}
|
||
//incGridDcs.Clear();
|
||
if (calledFrom == "FillGrid")
|
||
{
|
||
int idx = tstStrObj.GetFillGridIndex("dc" + includeDcs.ToString());
|
||
includeDcs = "";
|
||
if (idx != -1)
|
||
{
|
||
TStructDef.FGStruct fg = (TStructDef.FGStruct)tstStrObj.fgs[idx];
|
||
if (fg.fgSourceDC != "")
|
||
sourceDc = fg.fgSourceDC.Substring(2);
|
||
}
|
||
}
|
||
}
|
||
|
||
//loop for constructing the field value xml based on the frame no, row no and field order
|
||
foreach (TStructDef.DcStruct dc in tstStrObj.dcs)
|
||
{
|
||
string dcNo = Convert.ToString(dc.frameno);
|
||
|
||
//This condition will construct xml for all the non grids in the given tstruct,
|
||
//if the includeDcs contains any grid dc then that dc also will be included in the xml construction.
|
||
if (condition == "NG")
|
||
{
|
||
//– Only non grid data will be sent in input xml.For all grid dcs only row count will be sent.
|
||
if (dc.isgrid)
|
||
{
|
||
//For getdep web service, the other grid dcs rowcount also should be sent.
|
||
//if ((calledFrom == "GetDep" || calledFrom == "GetDependents") && incGridDcs.IndexOf(dcNo) == -1)
|
||
if (calledFrom == "GetDep" && incGridDcs.IndexOf(dcNo) == -1)
|
||
{
|
||
int rCnt = GetDcRowCount(dcNo);
|
||
dsDataXML.Append("<dc" + dcNo + " type=dc >" + rCnt + "</dc" + dcNo + ">");
|
||
}
|
||
|
||
//Refer bug - IWA-C-0000024
|
||
//Removed LoadData as current dc data should not be sent to webservice- This will result in tabdata bringing empty row.
|
||
if (calledFrom != "FillGrid" && calledFrom != "AutoComplete" && calledFrom != "axpbutton" && incGridDcs.IndexOf(dcNo) == -1)
|
||
continue;
|
||
}
|
||
}
|
||
|
||
int rowCnt = 0;
|
||
if (dc.isgrid)
|
||
{
|
||
rowCnt = GetDcRowCount(dcNo);
|
||
if (rowCnt == 0) rowCnt = 1;
|
||
if (calledFrom != "PickList" && dc.DCHasDataRows == false && calledFrom != "RefreshDc")
|
||
continue;
|
||
}
|
||
|
||
DataTable thisDataTable = dsDataSet.Tables["dc" + dcNo];
|
||
try
|
||
{
|
||
if (calledFrom != "AutoComplete" && calledFrom != "axpbutton")
|
||
{
|
||
DataRow[] rows;
|
||
rows = thisDataTable.Select("axp__isGrdVld" + dcNo + " = 'false'"); // axp__isGrdVld is Column Name
|
||
foreach (DataRow r in rows)
|
||
thisDataTable.Rows.Remove(r);
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
//catch block is not handlink because - we are skipping the rows which does not contains axp__isGrdVld+dcno column
|
||
}
|
||
bool isAddRow = false;
|
||
|
||
if (calledFrom == "RefreshDc" && thisDataTable.Rows.Count == 0)
|
||
{
|
||
DataRow newRow = thisDataTable.NewRow();
|
||
newRow["axp__rowno"] = 1;
|
||
newRow["axp__delrow"] = 0;
|
||
thisDataTable.Rows.Add(newRow);
|
||
thisDataTable.AcceptChanges();
|
||
isAddRow = true;
|
||
}
|
||
|
||
string[] dcRange = tstStrObj.GetDcFieldRange(dcNo).Split(',');
|
||
int startIdx = Convert.ToInt32(dcRange[0]);
|
||
int endIdx = Convert.ToInt32(dcRange[1]);
|
||
|
||
foreach (DataRow dr in thisDataTable.Rows)
|
||
{
|
||
|
||
int rowNo = Convert.ToInt32(dr["axp__rowno"]);
|
||
|
||
if (calledFrom != "AutoComplete" && calledFrom != "axpbutton" && thisDataTable.Columns.Contains(Constants.AXPISROWVALID + dcNo) && dr[Constants.AXPISROWVALID + dcNo].ToString() == "false")
|
||
continue;
|
||
|
||
if (calledFrom == "LoadTab" && dcNo == includeDcs)
|
||
DSFieldValueXMLHelper(dcNo, rowNo, startIdx, endIdx, dr, false, "");
|
||
else if (calledFrom == "FillGrid" && dc.isgrid && dcNo == sourceDc)
|
||
DSFieldValueXMLHelper(dcNo, rowNo, startIdx, endIdx, dr, false, "");
|
||
else if (calledFrom == "LoadTab" && dc.isgrid && incGridDcs.IndexOf(dcNo) != -1)
|
||
DSFieldValueXMLHelper(dcNo, rowNo, startIdx, endIdx, dr, false, "");
|
||
else if ((calledFrom == "LoadTab" || calledFrom == "FillGrid" || calledFrom == "AutoComplete") && dc.isgrid && dcNo != includeDcs)
|
||
DSFieldValueXMLHelperPerf(dcNo, rowNo, startIdx, endIdx, dr, tabParentFlds);
|
||
else
|
||
DSFieldValueXMLHelper(dcNo, rowNo, startIdx, endIdx, dr, false, "");
|
||
|
||
}
|
||
|
||
if (isAddRow && calledFrom == "RefreshDc")
|
||
{
|
||
thisDataTable.Rows.RemoveAt(0);
|
||
isAddRow = false;
|
||
}
|
||
}
|
||
|
||
fieldValueXml = dsDataXML.ToString();
|
||
|
||
}
|
||
private void DSFieldValueXMLPerf(string frameNum, string ActiveRowNo, ArrayList depFields, string fldDepGridDcs, Dictionary<string, string> includeDcRows, string includeDcs)
|
||
{
|
||
int fNo = -1;
|
||
bool isNumber = true;
|
||
bool IsDcInclude = false;
|
||
string[] refreshdc = new string[10];
|
||
if (includeDcs != string.Empty)
|
||
refreshdc = includeDcs.Split(',');
|
||
|
||
try
|
||
{
|
||
fNo = int.Parse(frameNum);
|
||
isNumber = true;
|
||
}
|
||
catch
|
||
{
|
||
isNumber = false;
|
||
}
|
||
|
||
if (isNumber)
|
||
frameNum = "F" + frameNum;
|
||
|
||
dsDataXML.Length = 0;
|
||
|
||
//loop for constructing the field value xml based on the frame no, row no and field order
|
||
foreach (TStructDef.DcStruct dc in tstStrObj.dcs)
|
||
{
|
||
string dcNo = Convert.ToString(dc.frameno);
|
||
|
||
string incRowsStr = string.Empty;
|
||
ArrayList includeRows = new ArrayList();
|
||
if (includeDcRows.ContainsKey(dcNo))
|
||
{
|
||
IsDcInclude = true;
|
||
includeDcRows.TryGetValue(dcNo, out incRowsStr);
|
||
string[] incRows = incRowsStr.Split(',');
|
||
for (int j = 0; j < incRows.Length; j++)
|
||
{
|
||
if (incRows[j] != "")
|
||
includeRows.Add(Convert.ToInt32(incRows[j].ToString()));
|
||
}
|
||
}
|
||
else
|
||
{
|
||
IsDcInclude = false;
|
||
if (Array.IndexOf(refreshdc, dcNo) > -1)
|
||
IsDcInclude = true;
|
||
else if (!dc.isgrid)
|
||
IsDcInclude = true;
|
||
string[] depDcs = fldDepGridDcs.Split(',');
|
||
for (int dIdx = 0; dIdx < depDcs.Length; dIdx++)
|
||
{
|
||
if (depDcs[dIdx].ToString() == dcNo)
|
||
{
|
||
IsDcInclude = true;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
string[] dcRange = tstStrObj.GetDcFieldRange(dcNo).Split(',');
|
||
int startIdx = Convert.ToInt32(dcRange[0]);
|
||
int endIdx = Convert.ToInt32(dcRange[1]);
|
||
|
||
int rowCnt = 0;
|
||
if (dc.isgrid)
|
||
{
|
||
if (dc.frameno == fNo || IsDcInclude)
|
||
{
|
||
rowCnt = GetDcRowCount(dcNo);
|
||
if (rowCnt == 0) rowCnt = 1;
|
||
if (dc.DCHasDataRows == false)
|
||
continue;
|
||
}
|
||
else
|
||
continue;
|
||
}
|
||
|
||
int ActRowNo = Convert.ToInt32(ActiveRowNo);
|
||
|
||
DataTable thisDataTable = dsDataSet.Tables["dc" + dcNo];
|
||
int subRowNo = 0;
|
||
//This loop will run through all the rows in the grid, if the given rowno is same as activerowno, then it will construct for all the fields
|
||
//Else it will construct xml only for the fields given in the depFields parameter.
|
||
foreach (DataRow dr in thisDataTable.Rows)
|
||
{
|
||
|
||
|
||
int rowNo = Convert.ToInt32(dr["axp__rowno"]);
|
||
|
||
//If a non grid field is changed and a grid has record in add panel(Invalid row) it should not be sent to web-service
|
||
if (frameNum != "F" + dc.frameno.ToString() && dc.isgrid && dr[Constants.AXPISROWVALID + dcNo].ToString() == "false")
|
||
continue;
|
||
|
||
if ((Array.IndexOf(refreshdc, dcNo) > -1) && (dc.frameno != fNo))
|
||
DSFieldValueXMLHelper(dcNo, rowNo, startIdx, endIdx, dr, false, "");
|
||
else if (!dc.isgrid)
|
||
DSFieldValueXMLHelper(dcNo, rowNo, startIdx, endIdx, dr, false, "");
|
||
else if (dc.frameno == fNo && rowNo == ActRowNo)
|
||
DSFieldValueXMLHelper(dcNo, rowNo, startIdx, endIdx, dr, false, "");
|
||
else if (IsDcInclude && includeRows.IndexOf(rowNo) != -1)
|
||
{
|
||
if (dc.ispopgrid)
|
||
{
|
||
subRowNo++;
|
||
DSFieldValueXMLHelper(dcNo, rowNo, startIdx, endIdx, dr, dc.ispopgrid, subRowNo.ToString());
|
||
}
|
||
else
|
||
{
|
||
DSFieldValueXMLHelper(dcNo, rowNo, startIdx, endIdx, dr, false, "");
|
||
}
|
||
}
|
||
else
|
||
DSFieldValueXMLHelperPerf(dcNo, rowNo, startIdx, endIdx, dr, depFields);
|
||
}
|
||
}
|
||
|
||
fieldValueXml = dsDataXML.ToString();
|
||
}
|
||
|
||
private void CreateFieldValueXml(string frameNum, string parDcNo, int ParRowNo, string popDcNo, int popRowNo)
|
||
{
|
||
DSFieldValueXML(frameNum, parDcNo, ParRowNo, popDcNo, popRowNo);
|
||
return;
|
||
}
|
||
|
||
public DataTable CreateDataTable()
|
||
{
|
||
return new DataTable();
|
||
}
|
||
|
||
/// <summary>
|
||
/// This method loops through the lists and construct the field value xml.
|
||
/// and updates the object variable “PopfieldValueXml”.
|
||
/// </summary>
|
||
private void CreatePopFieldValueXml(ArrayList fldArray, ArrayList fldValueArray, ArrayList fldDeletedArray, string frameNum, string pframeno, string maxRows, ArrayList popRows)
|
||
{
|
||
|
||
string fValue = string.Empty;
|
||
frameNum = "F" + frameNum;
|
||
StringBuilder fldXml = new StringBuilder();
|
||
StringBuilder popFldXml = new StringBuilder();
|
||
string rnList = "";
|
||
popFldXml.Append("<row>");
|
||
for (int i = 0; i < fieldName.Count; i++)
|
||
{
|
||
if (fieldControlName[i].ToString().IndexOf(frameNum.ToString()) == -1)
|
||
{
|
||
fldXml.Append("<" + fieldName[i] + ">");
|
||
fValue = CheckSpecialChars(fieldValue[i].ToString());
|
||
fldXml.Append(fValue);
|
||
fldXml.Append("</" + fieldName[i] + ">");
|
||
}
|
||
else
|
||
{
|
||
popFldXml.Append("<" + fieldName[i] + ">");
|
||
fValue = CheckSpecialChars(fieldValue[i].ToString());
|
||
popFldXml.Append(fValue);
|
||
popFldXml.Append("</" + fieldName[i] + ">");
|
||
}
|
||
}
|
||
|
||
popFGFieldValueXml = "";
|
||
if (popFldXml.ToString() == "") popFldXml.Append("<row>");
|
||
popFGFieldValueXml = "<GridList rnlist=\"" + rnList.ToString() + "\" mrno=\"" + maxRows.ToString() + "\" prno=\"" + pframeno.ToString() + "\">" + popFldXml.ToString() + "</row></GridList>" + "<FieldList>" + fgFieldValueXml.ToString() + "</FieldList>";
|
||
}
|
||
|
||
/// <summary>
|
||
/// function for replacing the special characters in a given string.
|
||
/// </summary>
|
||
/// <param name="str"></param>
|
||
/// <returns></returns>
|
||
/// <remarks></remarks>
|
||
private string CheckSpecialChars(string str)
|
||
{
|
||
//hack: The below line is used to make sure that the & in & is not converted inadvertantly
|
||
// for other chars this scenario will not come as it does not contains the same char.
|
||
str = Regex.Replace(str, "&", "&");
|
||
str = Regex.Replace(str, """, "“");
|
||
str = Regex.Replace(str, "\n", "<br>");
|
||
str = Regex.Replace(str, "&", "&");
|
||
str = Regex.Replace(str, "<", "<");
|
||
str = Regex.Replace(str, ">", ">");
|
||
str = Regex.Replace(str, "'", "'");
|
||
str = Regex.Replace(str, "\"", """);
|
||
str = Regex.Replace(str, "’", "'");
|
||
str = Regex.Replace(str, "“", """);
|
||
str = Regex.Replace(str, "”", """);
|
||
str = Regex.Replace(str, "™", "™");
|
||
str = Regex.Replace(str, "®", "®");
|
||
|
||
str = str.Replace((char)160, ' ');
|
||
|
||
if (str == defaultDateStr)
|
||
str = "";
|
||
return str;
|
||
}
|
||
|
||
private string GetDbFieldName(string fieldCompName, string dbRowNo)
|
||
{
|
||
if (dbRowNo.Length == 1)
|
||
dbRowNo = "00" + dbRowNo;
|
||
else if (dbRowNo.Length == 2)
|
||
dbRowNo = "0" + dbRowNo;
|
||
|
||
int fIndx = fieldCompName.LastIndexOf("F");
|
||
if (fIndx != -1)
|
||
{
|
||
string fldDcNo = fieldCompName.Substring(fIndx + 1);
|
||
string dbFldName = fieldCompName.Substring(0, fIndx - 3);
|
||
string newCompName = dbFldName + dbRowNo + "F" + fldDcNo;
|
||
return newCompName;
|
||
}
|
||
else
|
||
{
|
||
if (fieldCompName.StartsWith("dc") && dbRowNo == "0-1")
|
||
return "dc";
|
||
else
|
||
return fieldCompName;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// This method for for updating the existing field values and adding any new values.
|
||
/// Note: Only grid field values can be added and deleted.
|
||
/// </summary>
|
||
/// <param name="fldArray"></param>
|
||
/// <param name="fldValueArray"></param>
|
||
/// <param name="deletedArray"></param>
|
||
public void UpdateDataList(ArrayList fldArray, ArrayList fldDbRowNo, ArrayList fldValueArray, ArrayList deletedArray)
|
||
{
|
||
|
||
for (int j = 0; j < fldArray.Count; j++)
|
||
{
|
||
if (fldArray[j] != null)
|
||
{
|
||
if (fldValueArray[j].ToString() == defaultDateStr)
|
||
fldValueArray[j] = "";
|
||
|
||
string fldname = string.Empty; string frmNum = string.Empty; string fldRowNo = string.Empty;
|
||
string newCompName = GetDbFieldName(fldArray[j].ToString(), fldDbRowNo[j].ToString());
|
||
|
||
if (newCompName == "dc")
|
||
{
|
||
string[] dcData = fldValueArray[j].ToString().Split('♦');
|
||
string newRowCnt = dcData[0];
|
||
string changedRows = dcData[1];
|
||
if (changedRows != "")
|
||
{
|
||
SetDbRows(changedRows, fldArray[j].ToString().Substring(2), tstStrObj, "");
|
||
}
|
||
|
||
UpdateRowCount(fldArray[j].ToString(), newRowCnt);
|
||
continue;
|
||
}
|
||
|
||
int lastIndex = newCompName.LastIndexOf('F');
|
||
if (lastIndex != -1)
|
||
{
|
||
fldname = newCompName.Substring(0, lastIndex - 3);
|
||
fldRowNo = newCompName.Substring(lastIndex - 3, 3);
|
||
frmNum = newCompName.Substring(lastIndex + 1);
|
||
}
|
||
else
|
||
{
|
||
fldname = newCompName.Substring(0, newCompName.Length - 5);
|
||
fldRowNo = newCompName.Substring(lastIndex - 3, 3);
|
||
frmNum = newCompName.Substring(newCompName.Length - 2);
|
||
}
|
||
|
||
//Update the dc dchasdatarowws property.
|
||
TStructDef.DcStruct dc = (TStructDef.DcStruct)tstStrObj.dcs[Convert.ToInt32(frmNum) - 1];
|
||
if (dc.isgrid)
|
||
{
|
||
if (!dc.DCHasDataRows)
|
||
{
|
||
//Refer bugid- AXP-C-0000136
|
||
//If the row comes from client due to expression eval for pop up grid row, do not mark it valid
|
||
var valIdx = fldArray.IndexOf("axp__isGrdVld" + frmNum + fldRowNo + "F" + frmNum);
|
||
if (valIdx != -1 && fldValueArray[valIdx].ToString() == "false")
|
||
{
|
||
//In case of grid(pop) a new row value will be sent after expression evaluation but the row is not valid. In this case the dchasDataRows should not be changed to true.
|
||
}
|
||
else
|
||
{
|
||
dc.DCHasDataRows = true;
|
||
tstStrObj.dcs[Convert.ToInt32(frmNum) - 1] = dc;
|
||
}
|
||
}
|
||
}
|
||
|
||
//int index = fieldControlName.IndexOf(newCompName);
|
||
// int index = GetFldIndex(Convert.ToInt32(frmNum), fldname, Convert.ToInt32(fldDbRowNo[j]));
|
||
string newFldValue = fldValueArray[j].ToString();
|
||
|
||
//TODO: The same code is there in the TstructData constructor, and Jsontoarray
|
||
//if (fldname.ToLower() == "axpcurrencydec")
|
||
// CheckAxpCurrDec(fldname, newFldValue);
|
||
|
||
if (newCompName.StartsWith("axp_recid") && newFldValue == "") newFldValue = "0";
|
||
|
||
string tmpFldVal = string.Empty;
|
||
string tmpFldIdVal = string.Empty;
|
||
|
||
if (newCompName != string.Empty)
|
||
{
|
||
if (newFldValue.Contains("¿"))
|
||
{
|
||
string[] idVal = newFldValue.Split('¿');
|
||
tmpFldVal = idVal[1];
|
||
tmpFldIdVal = idVal[0];
|
||
}
|
||
else
|
||
tmpFldVal = newFldValue.ToString();
|
||
}
|
||
DSSubmit(fldname, Convert.ToInt32(fldDbRowNo[j].ToString()), tmpFldVal, tmpFldIdVal);
|
||
}
|
||
}
|
||
|
||
// For deleting the fields from the list.
|
||
for (int k = 0; k < deletedArray.Count; k++)
|
||
{
|
||
int fIdx = deletedArray[k].ToString().IndexOf("F");
|
||
string delRowNo = deletedArray[k].ToString().Substring(0, fIdx);
|
||
string delDcNo = deletedArray[k].ToString().Substring(fIdx + 1);
|
||
int tmpRowCnt = GetActualDcRowCount(delDcNo);//GetDcRowCount(delDcNo);//Refer Bug: AGI003750
|
||
if (tmpRowCnt == 1 && (delRowNo == "001" || delRowNo == "1"))
|
||
{
|
||
TStructDef.DcStruct dc = (TStructDef.DcStruct)tstStrObj.dcs[Convert.ToInt32(delDcNo) - 1];
|
||
dc.DCHasDataRows = false;
|
||
tstStrObj.dcs[Convert.ToInt32(delDcNo) - 1] = dc;
|
||
}
|
||
if (recordID != "0" && recordID != "")
|
||
DeleteRowInFldArrays(delDcNo, delRowNo);
|
||
else
|
||
DeleteRowInFldArrays(delDcNo, delRowNo);
|
||
|
||
tmpRowCnt = tmpRowCnt - 1;
|
||
if (tmpRowCnt >= 0)
|
||
UpdateRowCount("DC" + delDcNo, "DC" + delDcNo + "~" + tmpRowCnt);
|
||
}
|
||
}
|
||
|
||
private int GetActualDcRowCount(string dcNo)
|
||
{
|
||
int rowCount = 0;
|
||
DataTable dt = dsDataSet.Tables["dc" + dcNo];
|
||
if (dt.Rows.Count > 0)
|
||
{
|
||
rowCount = dt.Select("axp__isGrdVld" + dcNo + " = ''").Count();
|
||
}
|
||
return rowCount;
|
||
}
|
||
|
||
private string GetFrameNo(string fieldId)
|
||
{
|
||
return fieldId.Substring(fieldId.LastIndexOf("F") + 1);
|
||
}
|
||
|
||
private int GetDCRowCntIndex(string dcNo)
|
||
{
|
||
int index = -1;
|
||
for (int i = 0; i < dcRowCntVals.Count; i++)
|
||
{
|
||
string[] dcName = dcRowCntVals[i].ToString().Split('~');
|
||
if (dcName[0] == dcNo)
|
||
index = i;
|
||
}
|
||
return index;
|
||
}
|
||
|
||
private ArrayList GetSubGridDcsInTabDC(TStructDef strObj, string TabDcNo)
|
||
{
|
||
ArrayList subGridDcs = new ArrayList();
|
||
for (int i = 0; i < strObj.popdcs.Count; i++)
|
||
{
|
||
if (TabDcNo == ((TStructDef.PopDcStruct)(strObj.popdcs[i])).pdcno.ToString())
|
||
{
|
||
subGridDcs.Add(((TStructDef.PopDcStruct)(strObj.popdcs[i])).frameno);
|
||
}
|
||
}
|
||
return subGridDcs;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Function to parse the memvar node from the json and update the memvar arrays
|
||
/// </summary>
|
||
/// <param name="jsonData"></param>
|
||
/// <param name="calledFrom"></param>
|
||
public void ParseMemVarNode(string jsonData, string calledFrom)
|
||
{
|
||
jsonData = jsonData.Replace("*$*", "♦");
|
||
jsonData = jsonData.Replace("\\", ";bkslh");
|
||
string[] resval = jsonData.Split('♦');
|
||
StringBuilder dataJson = new StringBuilder();
|
||
if (jsonData == string.Empty)
|
||
return;
|
||
|
||
for (int j = 0; j < resval.Length; j++)
|
||
{
|
||
JArray memVarNode = null;
|
||
try
|
||
{
|
||
JObject tstData = JObject.Parse(resval[j]);
|
||
memVarNode = (JArray)tstData["memvar"];
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
logobj.CreateLog("ParseMemVarNode function -" + ex.Message, sessionid, "Exception-" + transid, "new");
|
||
}
|
||
|
||
if (memVarNode != null)
|
||
{
|
||
for (int m = 0; m < memVarNode.Count; m++)
|
||
{
|
||
string memVarName = string.Empty;
|
||
string memVarValue = string.Empty;
|
||
string memVarType = string.Empty;
|
||
|
||
Dictionary<string, string> values = JsonConvert.DeserializeObject<Dictionary<string, string>>(memVarNode[m].ToString());
|
||
|
||
if (values.ContainsKey("n"))
|
||
memVarName = values["n"];
|
||
if (values.ContainsKey("v"))
|
||
memVarValue = values["v"];
|
||
if (values.ContainsKey("t"))
|
||
memVarType = values["t"];
|
||
|
||
memVarValue = CheckSpecialChars(memVarValue);
|
||
int idx = memVarNames.IndexOf(memVarName);
|
||
if (idx == -1)
|
||
{
|
||
memVarNames.Add(memVarName);
|
||
memVarValues.Add(memVarValue);
|
||
memVarTypes.Add(memVarType);
|
||
}
|
||
else
|
||
{
|
||
memVarNames[idx] = memVarName;
|
||
memVarValues[idx] = memVarValue;
|
||
memVarTypes[idx] = memVarType;
|
||
}
|
||
}
|
||
|
||
//Construct the fieldvaluexml for memvar node and update the global variable
|
||
ConstructMemVarNode();
|
||
}
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// Function to construct the field value xml for memvar nodes from the arrays
|
||
/// </summary>
|
||
public void ConstructMemVarNode()
|
||
{
|
||
StringBuilder strXml = new StringBuilder();
|
||
//strXml.Append("<axp_memvars>");
|
||
for (int i = 0; i < memVarNames.Count; i++)
|
||
{
|
||
strXml.Append("<" + memVarNames[i].ToString() + " t='" + memVarTypes[i].ToString() + "'>" + memVarValues[i].ToString() + "</" + memVarNames[i].ToString() + ">");
|
||
}
|
||
//strXml.Append("</axp_memvars>");
|
||
memVarsData = strXml.ToString();
|
||
|
||
}
|
||
|
||
public void JsonToArray(string jsonResult, TStructDef strObj, string tabDcNo, string calledFrom)
|
||
{
|
||
|
||
|
||
ChangedDcs.Clear();
|
||
depFormatDcs.Clear();
|
||
if (jsonResult == string.Empty) return;
|
||
ArrayList tabDcs = new ArrayList();
|
||
AxDepArrays = new StringBuilder();
|
||
|
||
if (tabDcNo != "")
|
||
{
|
||
tabDcs = GetSubGridDcsInTabDC(strObj, tabDcNo);
|
||
tabDcs.Add(tabDcNo);
|
||
}
|
||
|
||
//Get the non grid experssion dependent fields if the call is done from a grid field.
|
||
ArrayList fldExpDeps = new ArrayList();
|
||
if (calledFrom == "GetDepPerf")
|
||
fldExpDeps = GetFldExpDependents(AxActDepField);
|
||
|
||
// dcRowCntVals = new ArrayList();
|
||
jsonResult = jsonResult.Replace("*$*", "♦");
|
||
jsonResult = jsonResult.Replace("\\", ";bkslh");
|
||
string[] resval = jsonResult.Split('♦');
|
||
StringBuilder dataJson = new StringBuilder();
|
||
tabJson = new StringBuilder();
|
||
string dcHasDataRowsStr = string.Empty;
|
||
string tabJsonPrefix = "{\"data\": [";
|
||
string timeTakenJson = string.Empty;
|
||
|
||
//Sub grid for GetDep related variables.
|
||
bool isDcPopGrid = false;
|
||
int dsRowNo = 0;
|
||
|
||
for (int j = 0; j < resval.Length; j++)
|
||
{
|
||
//TODO: all other json nodes should be handled in the json parsing
|
||
JArray Data = null;
|
||
try
|
||
{
|
||
JObject tstData = JObject.Parse(resval[j]);
|
||
Data = (JArray)tstData["data"];
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
logobj.CreateLog("JsonToArray function -" + ex.Message, sessionid, "Exception-" + transid, "new");
|
||
logobj.CreateLog("JsonData -" + jsonResult, sessionid, "Exception-" + transid, "");
|
||
//throw ex;
|
||
}
|
||
|
||
if (Data != null)
|
||
{
|
||
string fName = string.Empty;
|
||
string fValue = string.Empty;
|
||
string changedRows = string.Empty;
|
||
string delRows = string.Empty;
|
||
string rowNo = string.Empty;
|
||
string fDatatype = string.Empty;
|
||
string name = string.Empty;
|
||
string fldName = string.Empty;
|
||
string fldFrameNo = string.Empty;
|
||
string frmNum = string.Empty;
|
||
string frowValues = string.Empty;
|
||
string fldIdValues = string.Empty;
|
||
string idCol = string.Empty;
|
||
string masterRow = string.Empty;
|
||
string comboVal = string.Empty;
|
||
string comboFld = string.Empty;
|
||
string comboIdCol = "0";
|
||
string dcNo = "0";
|
||
string dpmStr = string.Empty;
|
||
string dpValues = string.Empty;
|
||
string idVal = string.Empty;
|
||
string oldIdVal = string.Empty;
|
||
string rowFromJson = string.Empty;
|
||
int DCPriorRowCount = 0;
|
||
string fillGridName = string.Empty;
|
||
StringBuilder ddlVals = new StringBuilder();
|
||
StringBuilder ddlDpVals = new StringBuilder();
|
||
bool isTabDc = false;
|
||
for (int m = 0; m < Data.Count; m++)
|
||
{
|
||
fDatatype = "";
|
||
idCol = "";
|
||
changedRows = string.Empty;
|
||
delRows = string.Empty;
|
||
masterRow = string.Empty;
|
||
|
||
dpValues = "";
|
||
string dcHasRows = string.Empty;
|
||
Dictionary<string, string> values = JsonConvert.DeserializeObject<Dictionary<string, string>>(Data[m].ToString());
|
||
|
||
|
||
if (values.ContainsKey("t"))
|
||
fDatatype = values["t"];
|
||
if (values.ContainsKey("n"))
|
||
fName = values["n"];
|
||
if (values.ContainsKey("v"))
|
||
fValue = values["v"];
|
||
if (values.ContainsKey("cr"))
|
||
changedRows = values["cr"];
|
||
if (values.ContainsKey("fg"))
|
||
fillGridName = values["fg"];
|
||
if (values.ContainsKey("dr"))
|
||
delRows = values["dr"];
|
||
if (values.ContainsKey("mr"))
|
||
masterRow = values["mr"];
|
||
if (values.ContainsKey("idcol"))
|
||
idCol = values["idcol"];
|
||
if (values.ContainsKey("id"))
|
||
idVal = values["id"];
|
||
if (values.ContainsKey("oldid"))
|
||
oldIdVal = values["oldid"];
|
||
if (values.ContainsKey("r"))
|
||
{
|
||
rowNo = values["r"];
|
||
if (rowNo.Length == 1)
|
||
rowNo = "00" + rowNo;
|
||
else if (rowNo.Length == 2)
|
||
rowNo = "0" + rowNo;
|
||
rowFromJson = rowNo;
|
||
}
|
||
if (values.ContainsKey("dp"))
|
||
dpValues = values["dp"];
|
||
if (values.ContainsKey("dpm"))
|
||
dpmStr = values["dpm"];
|
||
|
||
|
||
string rowValues = string.Empty;
|
||
if (idCol == "no" || idCol == "")
|
||
idCol = "0";
|
||
else
|
||
idCol = "1";
|
||
|
||
if (fName != string.Empty)
|
||
{
|
||
//This condition will get the fields in the tab dc which have master row true.
|
||
if (masterRow == "1" && dcNo == tabDcNo)
|
||
{
|
||
if (AxMasterRowFlds.IndexOf(fName) == -1)
|
||
AxMasterRowFlds.Add(fName);
|
||
}
|
||
|
||
fValue = fValue.Replace("^^dq", """);
|
||
fValue = fValue.Replace(";bkslh", "\\");
|
||
|
||
//To copy the dc2_referimage file from the given path to Axpert Session folder
|
||
if ((fName.StartsWith("dc") && fName.ToLower().EndsWith("_imagepath")))
|
||
hasImagePath = true;
|
||
if (fName.ToLower().Contains("dc2_referimages") && fValue != string.Empty)
|
||
GetReferedFiles(fValue, hasImagePath);
|
||
|
||
//TODO: Same code is available in TStructData constructor and UpdateDataList.
|
||
//if (fName.ToLower() == "axpcurrencydec")
|
||
// CheckAxpCurrDec(fName, fValue);
|
||
|
||
if (fDatatype != "c" && fDatatype != "dv")
|
||
dpmStr = string.Empty;
|
||
|
||
string rowVal = "";
|
||
|
||
if (fDatatype == "c" || fDatatype == "cl" || fDatatype == "rg")
|
||
{
|
||
comboVal = fValue;
|
||
comboFld = fName;
|
||
comboIdCol = idCol;
|
||
}
|
||
else if (fDatatype == "dv")
|
||
{
|
||
rowVal = fValue;
|
||
if (rowValues == "")
|
||
rowValues = rowVal;
|
||
else
|
||
rowValues += "" + rowVal;
|
||
|
||
string[] temp = rowVal.Split('?');
|
||
if (temp.Length <= 3 && comboVal == string.Empty)
|
||
{
|
||
StringBuilder strVal = new StringBuilder();
|
||
for (int i = 0; i < temp.Length; i++)
|
||
{
|
||
if (temp[i].ToString() != string.Empty)
|
||
strVal.Append(temp[i].ToString());
|
||
}
|
||
if (strVal.ToString().ToLower() == "yesno" || strVal.ToString().ToLower() == "noyes")
|
||
{
|
||
//To set the default value of checkbox in the grid dc to "no".
|
||
fValue = "no";
|
||
}
|
||
}
|
||
|
||
if (dpValues != string.Empty)
|
||
{
|
||
string[] dpVals = dpValues.Split('~');
|
||
string[] depFlds = dpmStr.Split(',');
|
||
string cbVal = string.Empty;
|
||
if (comboIdCol == "1")
|
||
cbVal = fValue.Substring(fValue.IndexOf("~") + 1);
|
||
else
|
||
cbVal = fValue;
|
||
cbVal = CheckSpecialChars(cbVal);
|
||
for (int depIdx = 0; depIdx < depFlds.Length; depIdx++)
|
||
{
|
||
AxDepArrays.Append("ComboParentField.push(\"" + comboFld + "\");ComboParentValue.push(\"" + cbVal + "\");ComboDepField.push(\"" + depFlds[depIdx] + "\");ComboDepValue.push(\"" + dpVals[depIdx] + "\");");
|
||
}
|
||
|
||
}
|
||
}
|
||
else if (fDatatype == "dc")
|
||
{
|
||
if (values.ContainsKey("hasdatarows"))
|
||
dcHasRows = values["hasdatarows"];
|
||
|
||
comboFld = "";
|
||
string dcRowCount = fName + "~" + fValue;
|
||
dcNo = fName.Substring(2);
|
||
DCPriorRowCount = 0;
|
||
//Code to avoid tabbed dc and its sub grid in the construction of json for GetTabData.
|
||
int tabIndx = tabDcs.IndexOf(dcNo);
|
||
if (tabIndx != -1)
|
||
isTabDc = true;
|
||
else
|
||
isTabDc = false;
|
||
|
||
if (strObj.IsDcFormatGrid(Convert.ToInt32(dcNo)))
|
||
{
|
||
depFormatDcs.Add(dcNo);
|
||
isTabDc = true;
|
||
}
|
||
|
||
if (isTabDc)
|
||
{
|
||
dcHasDataRowsStr = "{\"n\":\"DC" + dcNo + "\",\"v\":\"" + fValue + "\",\"t\":\"dc\",\"hasdatarows\":\"" + dcHasRows + "\"}";
|
||
}
|
||
|
||
bool dcOldHasRows = false;
|
||
bool isGrid = IsDcGrid(dcNo, strObj);
|
||
TStructDef.DcStruct dc = (TStructDef.DcStruct)tstStrObj.dcs[Convert.ToInt32(dcNo) - 1];
|
||
if (dc.ispopgrid)
|
||
isDcPopGrid = true;
|
||
else
|
||
isDcPopGrid = false;
|
||
if (isGrid)
|
||
{
|
||
if (dcHasRows != "")
|
||
{
|
||
dcOldHasRows = dc.DCHasDataRows;
|
||
if (dcHasRows == "yes")
|
||
dc.DCHasDataRows = true;
|
||
else
|
||
dc.DCHasDataRows = false;
|
||
tstStrObj.dcs[Convert.ToInt32(dcNo) - 1] = dc;
|
||
}
|
||
}
|
||
|
||
if (fValue == "0")
|
||
{
|
||
fValue = "1";
|
||
dcRowCount = fName + "~" + fValue;
|
||
}
|
||
|
||
if (isDcPopGrid && calledFrom == "GetDepPerf" && IsParentDc(AxActiveDc))
|
||
{
|
||
//Code to add the dr attribute recids to deleted row information.
|
||
if (delRows != string.Empty)
|
||
SetPopDeletedRows(dcNo, delRows);
|
||
// delete the old subgrid rows sent to the webservice for the getdep call
|
||
DeletePopRowsAfterDep();
|
||
AxSubGridRows = new ArrayList();
|
||
subWsRows = new ArrayList();
|
||
subDsRows = new ArrayList();
|
||
dsRowNo = 1;
|
||
//Since the full sub grid data will not be sent to the webservice,
|
||
//the row numbers will always start from 1 hence appending the rows to the grid.
|
||
DCPriorRowCount = GetDcRowCount(dcNo);
|
||
}
|
||
|
||
if (changedRows != "" && isGrid)
|
||
{
|
||
if (dcOldHasRows == false && dcHasRows == "yes")
|
||
changedRows = "d*," + changedRows;
|
||
if (ChangedDcs.IndexOf(dcNo) == -1)
|
||
ChangedDcs.Add(dcNo);
|
||
|
||
//If the dc has fill grid, and if the fillgrid condition is INIT or AOWE
|
||
//then the existing rows should be cleared and added.
|
||
//The same condition is also added in ExecData in process.js
|
||
int fgIdx = GetDcFillGridIndex(fName, fillGridName);
|
||
if (fgIdx != -1 && calledFrom != "ExecAction" && calledFrom != "AddRow")
|
||
{
|
||
TStructDef.FGStruct fg = (TStructDef.FGStruct)tstStrObj.fgs[fgIdx];
|
||
if (fg.FGCondition == Constants.INIT || fg.FGCondition == Constants.AOWE)
|
||
{
|
||
if (changedRows.IndexOf("d*") == -1)
|
||
changedRows = "d*," + changedRows;
|
||
if (IsParentDc(dcNo))
|
||
{
|
||
ArrayList arrPopDcs = new ArrayList();
|
||
arrPopDcs = GetPopDcsForParent(dcNo);
|
||
for (int pIdx = 0; pIdx < arrPopDcs.Count; pIdx++)
|
||
{
|
||
TStructDef.DcStruct pdc = (TStructDef.DcStruct)tstStrObj.dcs[Convert.ToInt32(arrPopDcs[pIdx].ToString()) - 1];
|
||
if (pdc.DCHasDataRows)
|
||
SetDbRows("d*", pdc.frameno.ToString(), tstStrObj, "");
|
||
|
||
}
|
||
}
|
||
}
|
||
else if (fg.FGCondition == Constants.APPEND && dcHasRows == "yes" && calledFrom == "Action")
|
||
{
|
||
DCPriorRowCount = 0;// GetDcRowCount(dcNo);
|
||
if (changedRows.IndexOf("d*") != -1)
|
||
dcRowCount = fName + "~" + (Convert.ToInt32(fValue));
|
||
else
|
||
dcRowCount = fName + "~" + (Convert.ToInt32(fValue) + GetDcRowCount(dcNo));
|
||
}
|
||
else if (fg.FGCondition == Constants.APPEND && dcOldHasRows)
|
||
{
|
||
DCPriorRowCount = GetDcRowCount(dcNo);
|
||
dcRowCount = fName + "~" + (Convert.ToInt32(fValue) + GetDcRowCount(dcNo));
|
||
}
|
||
}
|
||
|
||
if (dcHasRows == "yes" || (dcOldHasRows && dcHasRows == "no"))
|
||
{
|
||
//The cr attribute from the getdep will be ignored for subgrid
|
||
if (isDcPopGrid && calledFrom == "GetDepPerf" && IsParentDc(AxActiveDc))
|
||
continue;
|
||
SetDbRows(changedRows, dcNo, strObj, calledFrom);
|
||
}
|
||
}
|
||
else if (calledFrom == "FillGridMS" && isGrid && dcOldHasRows == false && dcHasRows == "yes")//Refer Bug: HEA000021-- Multy select fillgrid having hidden row its not adding based on srvice result.
|
||
{
|
||
SetDbRows("d*", dcNo, strObj, calledFrom);
|
||
}
|
||
UpdateRowCount(fName, dcRowCount);
|
||
}
|
||
else
|
||
{
|
||
//Code for setting default item value for auto select
|
||
comboFld = "";
|
||
}
|
||
|
||
//The isTabDc can be used for format grid dc, for returning the json without format grid data.
|
||
if (!isTabDc)
|
||
{
|
||
if (dataJson.ToString() == "")
|
||
dataJson.Append(Data[m].ToString());
|
||
else
|
||
dataJson.Append("," + Data[m].ToString());
|
||
}
|
||
else
|
||
{
|
||
|
||
if (dcHasDataRowsStr != "")
|
||
{
|
||
if (dataJson.ToString() == "")
|
||
dataJson.Append(dcHasDataRowsStr);
|
||
else
|
||
dataJson.Append("," + dcHasDataRowsStr);
|
||
|
||
dcHasDataRowsStr = string.Empty;
|
||
}
|
||
}
|
||
|
||
if (fDatatype == "dv")
|
||
{
|
||
ddlVals.Append(rowValues);
|
||
ddlVals.Append("♣");
|
||
ddlDpVals.Append(dpValues);
|
||
ddlDpVals.Append("♣");
|
||
DSUpdateRowValues(fName, Convert.ToInt32(rowNo) + DCPriorRowCount, ddlVals.ToString(), ddlDpVals.ToString(), masterRow, comboIdCol);
|
||
}
|
||
else
|
||
{
|
||
ddlVals = new StringBuilder();
|
||
if (fDatatype != "dc")
|
||
{
|
||
string rowFrmNo = string.Empty;
|
||
if (rowNo != "")
|
||
{
|
||
name = fName + rowNo + "F" + dcNo;
|
||
rowFrmNo = rowFrmNo + "F" + dcNo;
|
||
}
|
||
//If the get dependents is called on a grid field, then the below code will ignore all expression dependents in the non grid.
|
||
if (calledFrom == "GetDepPerf")
|
||
{
|
||
if (fldExpDeps.IndexOf(fName) != -1)
|
||
continue;
|
||
}
|
||
|
||
if (isDcPopGrid && calledFrom == "GetDepPerf" && IsParentDc(AxActiveDc))
|
||
{
|
||
dsRowNo = GetSubDsRowNo(Convert.ToInt32(rowNo), dcNo);
|
||
DSSubmit(fName, dsRowNo, fValue, idVal);
|
||
}
|
||
else
|
||
DSSubmit(fName, Convert.ToInt32(rowNo) + DCPriorRowCount, fValue, idVal);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
|
||
ParseJsonNodes(resval[j].ToString());
|
||
JArray timeTaken = null;
|
||
try
|
||
{
|
||
JObject tstData = JObject.Parse(resval[j]);
|
||
timeTaken = (JArray)tstData["timetaken"];
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
|
||
}
|
||
|
||
if (timeTaken != null)
|
||
{
|
||
timeTakenJson = resval[j].ToString() + "*$*";
|
||
continue;
|
||
}
|
||
|
||
if (dataJson.ToString() != "")
|
||
{
|
||
tabJson.Insert(0, tabJsonPrefix);
|
||
tabJson.Append(dataJson + "]}");
|
||
dataJson.Remove(0, dataJson.ToString().Length);
|
||
}
|
||
tabJson.Append(resval[j].ToString());
|
||
}
|
||
}
|
||
if (dataJson.ToString() != "")
|
||
{
|
||
tabJson.Insert(0, tabJsonPrefix);
|
||
tabJson.Append(dataJson + "]}");
|
||
dataJson.Remove(0, dataJson.ToString().Length);
|
||
tabJson.Insert(0, timeTakenJson);
|
||
}
|
||
|
||
//Call the function which parses thge memvar node and updates the arrays.
|
||
ParseMemVarNode(jsonResult, calledFrom);
|
||
}
|
||
|
||
|
||
//Function to get the exact rowno for the new row being added.
|
||
private int GetSubDsRowNo(int wsRowNo, string dcNo)
|
||
{
|
||
int dsRowNo = 0;
|
||
int idx = -1;
|
||
idx = subWsRows.IndexOf(wsRowNo);
|
||
if (idx == -1)
|
||
{
|
||
subWsRows.Add(wsRowNo);
|
||
dsRowNo = GetDcRowCount(dcNo) + 1;
|
||
subDsRows.Add(dsRowNo);
|
||
}
|
||
else
|
||
{
|
||
dsRowNo = (Int32)subDsRows[idx];
|
||
}
|
||
|
||
return dsRowNo;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Function return true if the given dc is a parent dc.
|
||
/// </summary>
|
||
/// <param name="dcNo"></param>
|
||
/// <returns></returns>
|
||
private bool IsParentDc(string dcNo)
|
||
{
|
||
bool isParDc = false;
|
||
for (int i = 0; i < tstStrObj.popdcs.Count; i++)
|
||
{
|
||
if (dcNo == ((TStructDef.PopDcStruct)(tstStrObj.popdcs[i])).pdcno.ToString())
|
||
{
|
||
isParDc = true;
|
||
break;
|
||
}
|
||
}
|
||
return isParDc;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Function returns array of popdcs defined for a given dc.
|
||
/// </summary>
|
||
/// <param name="dcNo"></param>
|
||
/// <returns></returns>
|
||
public ArrayList GetPopDcsForParent(string dcNo)
|
||
{
|
||
ArrayList arrPopDcs = new ArrayList();
|
||
for (int i = 0; i < tstStrObj.popdcs.Count; i++)
|
||
{
|
||
if (dcNo == ((TStructDef.PopDcStruct)(tstStrObj.popdcs[i])).pdcno.ToString())
|
||
{
|
||
arrPopDcs.Add(((TStructDef.PopDcStruct)(tstStrObj.popdcs[i])).frameno);
|
||
}
|
||
}
|
||
return arrPopDcs;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Function to get the non grid expression dependents for a field.
|
||
/// </summary>
|
||
/// <param name="fName"></param>
|
||
/// <returns></returns>
|
||
private ArrayList GetFldExpDependents(string fName)
|
||
{
|
||
int idx = tstStrObj.GetFieldIndex(fName);
|
||
TStructDef.FieldStruct fld = (TStructDef.FieldStruct)tstStrObj.flds[idx];
|
||
ArrayList fldExpDep = new ArrayList();
|
||
string[] fldDeps = fld.fieldDependents.Split(',');
|
||
for (int i = 0; i < fldDeps.Length; i++)
|
||
{
|
||
string depFldName = fldDeps[i].ToString();
|
||
string prefix = depFldName.Substring(0, 1);
|
||
int depIdx = tstStrObj.GetFieldIndex(depFldName.Substring(1));
|
||
if (depIdx != -1)
|
||
{
|
||
TStructDef.FieldStruct depFld = (TStructDef.FieldStruct)tstStrObj.flds[depIdx];
|
||
if (prefix == "e" && fld.fldframeno > depFld.fldframeno && !IsDcGrid(depFld.fldframeno.ToString(), tstStrObj))
|
||
{
|
||
fldExpDep.Add(fldDeps[i].ToString());
|
||
}
|
||
}
|
||
}
|
||
return fldExpDep;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Function to get the dependent grid dc for a given field.
|
||
/// </summary>
|
||
/// <param name="fieldName"></param>
|
||
/// <returns></returns>
|
||
public ArrayList GetGridDepForField(string fieldName)
|
||
{
|
||
int idx = tstStrObj.GetFieldIndex(fieldName);
|
||
TStructDef.FieldStruct fld = (TStructDef.FieldStruct)tstStrObj.flds[idx];
|
||
ArrayList sqlDepDc = new ArrayList();
|
||
string[] fldDeps = fld.fieldDependents.Split(',');
|
||
for (int i = 0; i < fldDeps.Length; i++)
|
||
{
|
||
string depFldName = fldDeps[i].ToString();
|
||
string prefix = depFldName.Substring(0, 1);
|
||
int depIdx = tstStrObj.GetFieldIndex(depFldName.Substring(1));
|
||
if (depIdx != -1)
|
||
{
|
||
TStructDef.FieldStruct depFld = (TStructDef.FieldStruct)tstStrObj.flds[depIdx];
|
||
if (prefix != "e" && sqlDepDc.IndexOf(depFld.fldframeno) == -1 && IsDcGrid(depFld.fldframeno.ToString(), tstStrObj))
|
||
{
|
||
sqlDepDc.Add(depFld.fldframeno);
|
||
}
|
||
}
|
||
}
|
||
return sqlDepDc;
|
||
}
|
||
|
||
private void StringToFile(string strDebugText)
|
||
{
|
||
if (!isDebugFileCreated)
|
||
{
|
||
logobj.CreateLog(strDebugText, HttpContext.Current.Session["nsessionid"].ToString(), "DebugValues", "new");
|
||
isDebugFileCreated = true;
|
||
}
|
||
logobj.CreateLog(strDebugText, HttpContext.Current.Session["nsessionid"].ToString(), "DebugValues", "");
|
||
|
||
}
|
||
|
||
private void ParseJsonNodes(string result)
|
||
{
|
||
if (result == string.Empty) return;
|
||
JArray cmdNode = null;
|
||
try
|
||
{
|
||
JObject tstData = JObject.Parse(result);
|
||
cmdNode = (JArray)tstData["command"];
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
logobj.CreateLog("ParseJsonNodes function -" + ex.Message, sessionid, "Exception-" + transid, "new");
|
||
}
|
||
|
||
if (cmdNode != null)
|
||
{
|
||
string cmdName = string.Empty;
|
||
string cmdVal = string.Empty;
|
||
for (int i = 0; i < cmdNode.Count; i++)
|
||
{
|
||
Dictionary<string, string> values = JsonConvert.DeserializeObject<Dictionary<string, string>>(cmdNode[i].ToString());
|
||
|
||
|
||
for (int k = 0; k < values.Count; k++)
|
||
{
|
||
if (values.ContainsKey("cmd"))
|
||
cmdName = values["cmd"];
|
||
if (values.ContainsKey("cmdval"))
|
||
cmdVal = values["cmdval"];
|
||
|
||
if (cmdName == "newtrans" || cmdName == "copytrans")
|
||
{
|
||
recordid = "0";
|
||
recordID = "0";
|
||
rid = "0";
|
||
ModifyAsNewRecord();
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
public string GetMasterRowFlds()
|
||
{
|
||
string AxFlds = string.Empty;
|
||
for (int i = 0; i < AxMasterRowFlds.Count; i++)
|
||
{
|
||
if (AxFlds == string.Empty)
|
||
AxFlds = AxMasterRowFlds[i].ToString();
|
||
else
|
||
AxFlds += "," + AxMasterRowFlds[i].ToString();
|
||
}
|
||
|
||
return AxFlds == string.Empty ? "Ax-NA" : AxFlds;
|
||
}
|
||
|
||
private void SetDbRowsOnLoad(string changedRows, string dcNo, TStructDef strObj)
|
||
{
|
||
int frameNo = Convert.ToInt32(dcNo);
|
||
string[] rowStr = changedRows.Split(',');
|
||
|
||
for (int i = 0; i < rowStr.Length; i++)
|
||
{
|
||
string firstChar = rowStr[i].Substring(0, 1);
|
||
string rowNo = rowStr[i].Substring(1);
|
||
if (firstChar == "d")
|
||
{
|
||
if (rowNo == "*")
|
||
DeleteAllRowsInDc(dcNo);
|
||
else
|
||
DeleteRowInFldArrays(dcNo, rowNo);
|
||
}
|
||
}
|
||
}
|
||
|
||
public void SetSubGridRows(string subGridRows)
|
||
{//The string will be in the format of popdc1~row1,row2,row3¿popdc2~row1,row2
|
||
if (subGridRows != string.Empty)
|
||
{
|
||
string[] subrows = subGridRows.Split('¿');
|
||
for (int i = 0; i < subrows.Length; i++)
|
||
{
|
||
if (subrows[i].ToString() != string.Empty)
|
||
{
|
||
AxSubGridRows.Add(subrows[i].ToString());
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
private void SetDbRows(string changedRows, string dcNo, TStructDef strObj, string calledFrom)
|
||
{
|
||
int frameNo = Convert.ToInt32(dcNo);
|
||
string[] rowStr = changedRows.Split(',');
|
||
|
||
for (int i = 0; i < rowStr.Length; i++)
|
||
{
|
||
if (rowStr[i] == string.Empty)
|
||
continue;
|
||
try
|
||
{
|
||
string firstChar = rowStr[i].Substring(0, 1);
|
||
string rowNo = rowStr[i].Substring(1);
|
||
if (firstChar == "d")
|
||
{
|
||
if (rowNo == "*")
|
||
DeleteAllRowsInDc(dcNo);
|
||
else
|
||
DeleteRowInFldArrays(dcNo, rowNo);
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
logobj.CreateLog(ex.StackTrace, HttpContext.Current.Session["nsessionid"].ToString(), "Exception", "new");
|
||
}
|
||
}
|
||
}
|
||
|
||
private string GetMaxDcRowNo(string dcNo)
|
||
{
|
||
int rowNo = 0;
|
||
for (int i = 0; i < fieldControlName.Count; i++)
|
||
{
|
||
if (fieldFrameNo[i].ToString() == dcNo)
|
||
{
|
||
string rNo = fieldRowNo[i].ToString();
|
||
if (Convert.ToInt32(rNo) > rowNo)
|
||
rowNo = Convert.ToInt32(rNo);
|
||
}
|
||
}
|
||
|
||
return GetRowNoHelper(Convert.ToString(rowNo + 1));
|
||
}
|
||
|
||
private string GetFieldsRowNo(string fldId)
|
||
{
|
||
int idx = fldId.LastIndexOf("F");
|
||
if (idx != -1)
|
||
return fldId.Substring(idx - 3, 3);
|
||
else
|
||
return "000";
|
||
}
|
||
|
||
private string GetRowNoHelper(string rowNo)
|
||
{
|
||
if (rowNo.Length == 1)
|
||
rowNo = "00" + rowNo;
|
||
else if (rowNo.Length == 2)
|
||
rowNo = "0" + rowNo;
|
||
return rowNo;
|
||
}
|
||
|
||
private string CreateDataJson(Boolean IsDc, string dcNo, string Value, string rowCnt, string dataJson)
|
||
{
|
||
string dcDataRowsStr = string.Empty;
|
||
if (IsDc)
|
||
dcDataRowsStr = "{\"n\":\"DC" + dcNo + "\",\"v\":\"" + rowCnt + "\",\"t\":\"dc\"}";
|
||
else
|
||
dcDataRowsStr = "{\"n\":\"axp_recid" + dcNo + "\",\"v\":\"0\",\"r\":\"" + rowCnt + "\",\"t\":\"s\"}";
|
||
if (dataJson.ToString() != "")
|
||
dcDataRowsStr = "," + dcDataRowsStr;
|
||
|
||
return dcDataRowsStr;
|
||
}
|
||
|
||
public void UpdateRowCount(string dcNo, string newRowCnt)
|
||
{
|
||
int index = -1;
|
||
for (int i = 0; i < dcRowCntVals.Count; i++)
|
||
{
|
||
string[] dcRCnt = dcRowCntVals[i].ToString().Split('~');
|
||
if (dcRCnt[0].ToString().ToLower() == dcNo.ToLower())
|
||
{
|
||
index = i;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (index == -1)
|
||
dcRowCntVals.Add(newRowCnt);
|
||
else
|
||
dcRowCntVals[index] = newRowCnt;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Function to get the fields index from the fieldControlName array.
|
||
/// </summary>
|
||
/// <param name="fieldName"></param>
|
||
/// <returns></returns>
|
||
public int GetFieldIndex(string fldName)
|
||
{
|
||
for (int j = 0; j < fieldControlName.Count; j++)
|
||
{
|
||
if (fieldControlName[j] != null)
|
||
{
|
||
if (fieldControlName[j].ToString() == fldName)
|
||
{
|
||
return j;
|
||
}
|
||
}
|
||
}
|
||
|
||
return -1;
|
||
}
|
||
|
||
public string CallDeleteDataWS(string s)
|
||
{
|
||
DateTime stTime = DateTime.Now;
|
||
string news = GetTraceString(s);
|
||
if (news != "") s = news;
|
||
s = s + HttpContext.Current.Session["axApps"].ToString() + HttpContext.Current.Application["axProps"].ToString() + HttpContext.Current.Session["axGlobalVars"].ToString() + HttpContext.Current.Session["axUserVars"].ToString() + "</Transaction>";
|
||
string result = null;
|
||
//Call service
|
||
objWebServiceExt = new ASBExt.WebServiceExt();
|
||
DateTime asStart = DateTime.Now;
|
||
result = objWebServiceExt.CallDeleteDataWS(transid, s);
|
||
DateTime asEnd = DateTime.Now;
|
||
if (result.ToLower().IndexOf("data deleted successfully") > -1)
|
||
RemoveAttachFromServer(s, transid);
|
||
//RemoveAttachFromDir("");
|
||
if (logTimeTaken)
|
||
{
|
||
webTime1 = asStart.Subtract(stTime).TotalMilliseconds;
|
||
webTime2 = DateTime.Now.Subtract(asEnd).TotalMilliseconds;
|
||
asbTime = asEnd.Subtract(asStart).TotalMilliseconds;
|
||
}
|
||
return result;
|
||
}
|
||
|
||
public string CallAddRowWS(TStructData tstData, ArrayList fldArray, ArrayList fldDbRowNo, ArrayList fldValueArray, ArrayList fldDeletedArray, string s, string dcNo)
|
||
{
|
||
string news = GetTraceString(s);
|
||
if (news != "") s = news;
|
||
transid = tstData.transid.ToString();
|
||
ires = tstStrObj.structRes;
|
||
tstData.GetFieldValueXml(fldArray, fldDbRowNo, fldValueArray, fldDeletedArray, "-1", "", "NG", dcNo);
|
||
s += tstData.fieldValueXml + memVarsData;
|
||
s += HttpContext.Current.Session["axApps"].ToString() + HttpContext.Current.Application["axProps"].ToString() + HttpContext.Current.Session["axGlobalVars"].ToString() + HttpContext.Current.Session["axUserVars"].ToString();
|
||
s += "</sqlresultset>";
|
||
string result = string.Empty;
|
||
|
||
//Call service
|
||
objWebServiceExt = new ASBExt.WebServiceExt();
|
||
result = objWebServiceExt.CallAddRowWS(transid, s, ires);
|
||
return result;
|
||
}
|
||
|
||
public string CallAddRowPerfWS(TStructData tstData, ArrayList fldArray, ArrayList fldDbRowNo, ArrayList fldValueArray, ArrayList fldDeletedArray, string s, string dcNo)
|
||
{
|
||
string news = GetTraceString(s);
|
||
if (news != "") s = news;
|
||
transid = tstData.transid.ToString();
|
||
ires = tstStrObj.structRes;
|
||
tstData.GetPerfFieldValueXml(fldArray, fldDbRowNo, fldValueArray, fldDeletedArray, "-1", "", "NG", dcNo);
|
||
s += WsPerfAddRowLoadDc(dcNo, "AddRow");
|
||
s += memVarsData;
|
||
s += HttpContext.Current.Session["axApps"].ToString() + HttpContext.Current.Application["axProps"].ToString() + HttpContext.Current.Session["axGlobalVars"].ToString() + HttpContext.Current.Session["axUserVars"].ToString();
|
||
s += "</sqlresultset>";
|
||
string result = string.Empty;
|
||
|
||
//Call service
|
||
objWebServiceExt = new ASBExt.WebServiceExt();
|
||
result = objWebServiceExt.CallAddRowWS(transid, s, ires);
|
||
return result;
|
||
}
|
||
|
||
private string WsPerfAddRowLoadDc(string dcno, string calledFrom)
|
||
{
|
||
string iXml = string.Empty;
|
||
int dcFrame = int.Parse(dcno);
|
||
TStructDef.DcStruct pfldDc = (TStructDef.DcStruct)tstStrObj.dcs[dcFrame - 1];
|
||
if (pfldDc.dcPList != "")
|
||
{
|
||
string[] parentFlds = pfldDc.dcPList.Replace("~", ",").Split(',');
|
||
string globalVars = HttpContext.Current.Session["axGlobalVars"].ToString();
|
||
string userVars = HttpContext.Current.Session["axUserVars"].ToString();
|
||
for (int i = 0; i < parentFlds.Length; i++)
|
||
{
|
||
int pIndx = tstStrObj.GetFieldIndex(parentFlds[i]);
|
||
if (pIndx == -1)
|
||
{
|
||
if (globalVars.ToLower().IndexOf("<" + parentFlds[i].ToLower() + ">") > -1)
|
||
continue;
|
||
else if (userVars.ToLower().IndexOf("<" + parentFlds[i].ToLower() + ">") > -1)
|
||
continue;
|
||
else
|
||
continue;
|
||
}
|
||
TStructDef.FieldStruct pfld = (TStructDef.FieldStruct)tstStrObj.flds[pIndx];
|
||
if (calledFrom == "AddRow" || calledFrom == "DeleteRow")
|
||
iXml += PerfGetDepFldValues(pfld.fldFrameNo, 0, calledFrom, pfld);
|
||
else if ((calledFrom == "LoadDc" || calledFrom == "FillGrid") && pfld.fldFrameNo != dcFrame)
|
||
iXml += PerfGetDepFldValues(pfld.fldFrameNo, 0, calledFrom, pfld);
|
||
}
|
||
}
|
||
return iXml;
|
||
}
|
||
|
||
private string WsPerfFieldToXML(string fldName, string rowNo, string value, string oldValue, string idvalue, string oldIdValue, string dcNo, Boolean fldSaveNormal, TStructDef.FieldStruct fld = new TStructDef.FieldStruct())
|
||
{
|
||
string dsDataXML = string.Empty;
|
||
rowNo = GetRowNoHelper(rowNo.ToString());
|
||
value = CheckSpecialChars(value);
|
||
oldValue = CheckSpecialChars(oldValue);
|
||
string oldVal = "";
|
||
if (recordid != "0")
|
||
{
|
||
if (value != oldValue)
|
||
oldVal = "ov=\"" + oldValue + "\"";
|
||
else
|
||
oldVal = "";
|
||
}
|
||
if (fldName.StartsWith(Constants.IMGPrefix))
|
||
return dsDataXML;
|
||
if (fld.datatype != null && fld.datatype.ToLower() == "image" && imgAttachPath != "")
|
||
return dsDataXML;
|
||
if (fldSaveNormal)
|
||
{
|
||
if (Convert.ToString(idvalue) == "") idvalue = "0";
|
||
if (Convert.ToString(oldIdValue) == "") oldIdValue = "0";
|
||
dsDataXML += "<" + fldName + " rowno=\"" + rowNo + "\" id=\"" + idvalue + "\" oldid=\"" + oldIdValue + "\" " + oldVal + ">" + value + "</" + fldName + ">";
|
||
}
|
||
else
|
||
{
|
||
dsDataXML += "<" + fldName + " rowno=\"" + rowNo + "\" " + oldVal + ">" + value + "</" + fldName + ">";
|
||
}
|
||
return dsDataXML;
|
||
}
|
||
|
||
public string CallDeleteRowWS(TStructData tstData, ArrayList fldArray, ArrayList fldDbRowNo, ArrayList fldValueArray, ArrayList fldDeletedArray, string s, string dcNo)
|
||
{
|
||
string news = GetTraceString(s);
|
||
if (news != "") s = news;
|
||
transid = tstData.transid.ToString();
|
||
ires = tstStrObj.structRes;
|
||
tstData.GetFieldValueXml(fldArray, fldDbRowNo, fldValueArray, fldDeletedArray, "-1", "", "NG", dcNo);
|
||
s += tstData.fieldValueXml + memVarsData;
|
||
s += HttpContext.Current.Session["axApps"].ToString() + HttpContext.Current.Application["axProps"].ToString() + HttpContext.Current.Session["axGlobalVars"].ToString() + HttpContext.Current.Session["axUserVars"].ToString();
|
||
s += "</sqlresultset>";
|
||
string result = string.Empty;
|
||
//Call service
|
||
objWebServiceExt = new ASBExt.WebServiceExt();
|
||
result = objWebServiceExt.CallDeleteRowWS(transid, s, ires);
|
||
return result;
|
||
}
|
||
|
||
public string CallDeleteRowPerfWS(TStructData tstData, ArrayList fldArray, ArrayList fldDbRowNo, ArrayList fldValueArray, ArrayList fldDeletedArray, string s, string dcNo)
|
||
{
|
||
string news = GetTraceString(s);
|
||
if (news != "") s = news;
|
||
transid = tstData.transid.ToString();
|
||
ires = tstStrObj.structRes;
|
||
tstData.GetPerfFieldValueXml(fldArray, fldDbRowNo, fldValueArray, fldDeletedArray, "-1", "", "NG", dcNo);
|
||
s += WsPerfAddRowLoadDc(dcNo, "DeleteRow");
|
||
s += memVarsData;
|
||
s += HttpContext.Current.Session["axApps"].ToString() + HttpContext.Current.Application["axProps"].ToString() + HttpContext.Current.Session["axGlobalVars"].ToString() + HttpContext.Current.Session["axUserVars"].ToString();
|
||
s += "</sqlresultset>";
|
||
string result = string.Empty;
|
||
bool callService = false;
|
||
if (tstStrObj.wsPerfEnabled == true)
|
||
{
|
||
if (tstStrObj.wsPerfGRDDcs != null && tstStrObj.wsPerfGRDDcs.IndexOf(dcNo) != -1)
|
||
callService = true;
|
||
}
|
||
else
|
||
callService = true;
|
||
if (callService)
|
||
{
|
||
objWebServiceExt = new ASBExt.WebServiceExt();
|
||
result = objWebServiceExt.CallDeleteRowWS(transid, s, ires);
|
||
}
|
||
return result;
|
||
}
|
||
|
||
public string LoadComboValues(TStructData tstData, ArrayList fldArray, ArrayList fldDbRowNo, ArrayList fldValueArray, ArrayList fldDeletedArray, string iXml, string dcNo)
|
||
{
|
||
DateTime stTime = DateTime.Now;
|
||
string strTrace = GetTraceString(iXml);
|
||
if (strTrace != "") iXml = strTrace;
|
||
string result = string.Empty;
|
||
//GetGlobalVars();
|
||
transid = tstData.transid.ToString();
|
||
ires = tstStrObj.structRes;
|
||
//tstData.GetFieldValueXml(fldArray, fldDbRowNo, fldValueArray, fldDeletedArray, "-1", "LoadTab", "NG", dcNo);
|
||
//iXml += tstData.fieldValueXml + memVarsData;
|
||
tstData.GetPerfFieldValueXml(fldArray, fldDbRowNo, fldValueArray, fldDeletedArray, "-1", "LoadTab", "NG", dcNo);
|
||
iXml += WsPerfAddRowLoadDc(dcNo, "LoadDc");
|
||
iXml += memVarsData;
|
||
iXml += HttpContext.Current.Session["axApps"].ToString() + HttpContext.Current.Application["axProps"].ToString() + HttpContext.Current.Session["axGlobalVars"].ToString() + HttpContext.Current.Session["axUserVars"].ToString();
|
||
iXml += "</sqlresultset>";
|
||
//Call service
|
||
objWebServiceExt = new ASBExt.WebServiceExt();
|
||
DateTime asStart = DateTime.Now;
|
||
|
||
if (CallWsPerfLoadDc(dcNo))
|
||
result = objWebServiceExt.CallLoadDCCombosWS(transid, iXml, ires);
|
||
DateTime asEnd = DateTime.Now;
|
||
if (logTimeTaken)
|
||
{
|
||
webTime1 = asStart.Subtract(stTime).TotalMilliseconds;
|
||
webTime2 = DateTime.Now.Subtract(asEnd).TotalMilliseconds;
|
||
asbTime = asEnd.Subtract(asStart).TotalMilliseconds;
|
||
}
|
||
return result;
|
||
}
|
||
|
||
private bool CallWsPerfLoadDc(string dcNo)
|
||
{
|
||
bool isCallDcCombo = false;
|
||
//If dc has fillgrid
|
||
if (dcNo != "" && tstStrObj.wsPerfFGDcName != null && rid == "0")
|
||
{
|
||
string[] flGridDc = tstStrObj.wsPerfFGDcName;
|
||
var loaddcFG = flGridDc.Where(d => d.ToLower() == "dc" + dcNo).ToList();
|
||
if (loaddcFG.Count > 0)
|
||
isCallDcCombo = true;
|
||
}
|
||
//Below condition not required to now becuse of accept sql field will take cae either doformload, addrow or getdependency
|
||
////If dc has accept sql or select with auto select fields
|
||
//if (tstStrObj.wsPerfLDcName != null && isCallDcCombo == false && rid == "0")
|
||
//{
|
||
// string[] fldldCall = tstStrObj.wsPerfLDcName;
|
||
// var loaddcFld = fldldCall.Where(fd => fd.ToLower() == "dc" + dcNo).ToList();
|
||
// if (loaddcFld.Count > 0)
|
||
// isCallDcCombo = true;
|
||
//}
|
||
return isCallDcCombo;
|
||
}
|
||
|
||
public string GetSubGridCombos(ArrayList fldArray, ArrayList fldDbRowNo, ArrayList fldValueArray, ArrayList fldDeletedArray, string iXml, string dcNo, string parDcNo, int popRowNo, int parRowNo)
|
||
{
|
||
string strTrace = GetTraceString(iXml);
|
||
if (strTrace != "") iXml = strTrace;
|
||
string result = string.Empty;
|
||
ires = tstStrObj.structRes;
|
||
GetPopFieldValueXml(fldArray, fldDbRowNo, fldValueArray, fldDeletedArray, "-1", parDcNo, parRowNo, dcNo, popRowNo);
|
||
iXml += fieldValueXml + memVarsData;
|
||
iXml += HttpContext.Current.Session["axApps"].ToString() + HttpContext.Current.Application["axProps"].ToString() + HttpContext.Current.Session["axGlobalVars"].ToString() + HttpContext.Current.Session["axUserVars"].ToString();
|
||
iXml += "</sqlresultset>";
|
||
//Call service
|
||
objWebServiceExt = new ASBExt.WebServiceExt();
|
||
result = objWebServiceExt.CallGetSubGridCCombosWS(transid, iXml, ires);
|
||
return result;
|
||
}
|
||
|
||
|
||
#endregion
|
||
|
||
#endregion
|
||
|
||
private void UpdateRowValues(string fldName, string rowNo, string dcNo, string comboValues, string dpValues)
|
||
{
|
||
int idx = GetFldIndex(Convert.ToInt32(dcNo), fldName, Convert.ToInt32(rowNo));
|
||
if (idx != -1)
|
||
{
|
||
fieldRowValues[idx] = comboValues;
|
||
fieldDPVals[idx] = dpValues;
|
||
}
|
||
}
|
||
|
||
public bool IsDcGrid(string dcNo, TStructDef strObj)
|
||
{
|
||
bool isGrid = false;
|
||
for (int i = 0; i < strObj.dcs.Count; i++)
|
||
{
|
||
TStructDef.DcStruct dc = (TStructDef.DcStruct)strObj.dcs[i];
|
||
if (dc.frameno.ToString() == dcNo && dc.isgrid == true)
|
||
{
|
||
isGrid = true;
|
||
break;
|
||
}
|
||
}
|
||
return isGrid;
|
||
}
|
||
|
||
public int GetDcRowCount(string dcNo)
|
||
{
|
||
return dsDataSet.Tables["dc" + dcNo].Rows.Count;
|
||
}
|
||
|
||
#region PickList Methods
|
||
/// <summary>
|
||
/// Function to call the webservice which returns the filtered value for the picklist field.
|
||
/// </summary>
|
||
/// <param name="iXml"></param>
|
||
/// <returns></returns>
|
||
public string GetPickListResult(ArrayList fldArray, ArrayList fldDbRowNo, ArrayList fldValueArray, ArrayList fldDeletedArray, string iXml, string structXml, string fldName, string frameNo, string parentInfo, string subGridInfo, string activeRow, string includeDcs)
|
||
{
|
||
string res = "";
|
||
GetPicklistInputXml(fldArray, fldDbRowNo, fldValueArray, fldDeletedArray, fldName, frameNo, parentInfo, subGridInfo, activeRow);
|
||
iXml += this.fieldValueXml + memVarsData;
|
||
iXml += HttpContext.Current.Session["axApps"].ToString() + HttpContext.Current.Application["axProps"].ToString() + HttpContext.Current.Session["axGlobalVars"].ToString() + HttpContext.Current.Session["axUserVars"].ToString();
|
||
iXml += "</sqlresultset>";
|
||
//Call service
|
||
objWebServiceExt = new ASBExt.WebServiceExt();
|
||
iXml = util.CheckSplChrInputXML(iXml);
|
||
res = objWebServiceExt.CallGetSearchResultWS(transid, iXml, structXml);
|
||
if (res != "done" && res != "" && !res.StartsWith(Constants.ERROR))
|
||
{
|
||
res = ParsePickListJson(res);
|
||
}
|
||
return res;
|
||
}
|
||
|
||
public void GetPicklistInputXml(ArrayList fldArray, ArrayList fldDbRowNo, ArrayList fldValueArray, ArrayList fldDeletedArray, string fldName, string frameNo, string parentInfo, string subGridInfo, string activeRow)
|
||
{
|
||
int idx = tstStrObj.GetFieldIndex(fldName);
|
||
TStructDef.FieldStruct fld = (TStructDef.FieldStruct)tstStrObj.flds[idx];
|
||
ArrayList AxDepFields = new ArrayList();
|
||
bool isDcGrid = false;
|
||
Dictionary<string, string> IncludeDcRows = new Dictionary<string, string>();
|
||
isDcGrid = IsDcGrid(frameNo, tstStrObj);
|
||
|
||
if (isDcGrid)
|
||
{
|
||
string DepFlds = fld.fieldSqlDepParents;
|
||
AxDepFields = GetParDepFlds(fld.fieldSqlDepParents);
|
||
}
|
||
|
||
if (fld.fieldSqlGridDeps != string.Empty)
|
||
{
|
||
string[] strSDeps = fld.fieldSqlGridDeps.Split(',');
|
||
for (int i = 0; i < strSDeps.Length; i++)
|
||
{
|
||
AxDepFields.Add(strSDeps[i].ToString());
|
||
}
|
||
|
||
//The below statement will add the current field to the dependent fields if the current dc is a grid dc
|
||
//and it has dependents in other grid, then all the row values for the field should be sent in the input xml.
|
||
if (isDcGrid)
|
||
AxDepFields.Add(fld.name);
|
||
}
|
||
|
||
|
||
//If the field has non grid sql dependents, then send the parent values for that dep field also
|
||
if (IsDcGrid(frameNo, tstStrObj))
|
||
{
|
||
//If the call is made from a parent grid, then all its subgriud and their respective rows for the given parent row
|
||
//will be sent in the given format: dcno~rowno1,rowno2¿dcno~rowno1,rowno2...
|
||
if (subGridInfo != "")
|
||
{
|
||
if (subGridInfo.IndexOf("¿") != -1)
|
||
{
|
||
string[] subgridDcs = subGridInfo.Split('¿');
|
||
for (int i = 0; i < subgridDcs.Length; i++)
|
||
{
|
||
string[] dcInfo = subgridDcs[i].ToString().Split('~');
|
||
IncludeDcRows.Add(dcInfo[0], dcInfo[1]);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
IncludeDcRows.Add(subGridInfo.Substring(0, subGridInfo.IndexOf("~")), subGridInfo.Substring(subGridInfo.IndexOf("~") + 1));
|
||
}
|
||
}
|
||
|
||
//If the call is made from sub grid, then the parentinfo will contain the parent dc no and parent row no in the given format : dcno~rowno
|
||
if (parentInfo != "")
|
||
{
|
||
IncludeDcRows.Add(parentInfo.Substring(0, parentInfo.IndexOf("~")), parentInfo.Substring(parentInfo.IndexOf("~") + 1));
|
||
}
|
||
|
||
|
||
//first update the list with the new fldArray.
|
||
UpdateDataList(fldArray, fldDbRowNo, fldValueArray, fldDeletedArray);
|
||
|
||
DeleteDefaultRowInPopDc(project, user, transid, sessionid, AxRole);
|
||
|
||
CreateFieldValueXmlPerf(frameNo, activeRow, AxDepFields, fld.fieldDepGridDcs, IncludeDcRows, "");
|
||
}
|
||
else
|
||
{
|
||
if (AxDepFields.Count > 0)
|
||
{
|
||
//if a non grid fields has dependent grid dc fields, then send that dc fields data also.
|
||
//first update the list with the new fldArray.
|
||
UpdateDataList(fldArray, fldDbRowNo, fldValueArray, fldDeletedArray);
|
||
DeleteDefaultRowInPopDc(project, user, transid, sessionid, AxRole);
|
||
CreateFieldValueXmlPerf(frameNo, activeRow, AxDepFields, fld.fieldDepGridDcs, IncludeDcRows, "");
|
||
}
|
||
else
|
||
{
|
||
//if a non grid fields has dependent grid Fill grid dc, then send that dc data also.
|
||
GetFieldValueXml(fldArray, fldDbRowNo, fldValueArray, fldDeletedArray, "-1", "GetDependents", "NG", fld.fieldDepFillDcs);
|
||
}
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// Function to parse the result of GetSearchResult service and construct the result string and return to the client.
|
||
/// </summary>
|
||
/// <param name="result"></param>
|
||
/// <returns></returns>
|
||
private string ParsePickListJson(string result)
|
||
{
|
||
StringBuilder pickDataArray = new StringBuilder();
|
||
JArray Data;
|
||
try
|
||
{
|
||
result = result.Replace("\\", ";bkslh");
|
||
JObject tstData = JObject.Parse(result);
|
||
Data = (JArray)tstData["pickdata"];
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
throw ex;
|
||
}
|
||
|
||
if (Data != null)
|
||
{
|
||
string fName = string.Empty;
|
||
string fValue = string.Empty;
|
||
for (int m = 0; m < Data.Count; m++)
|
||
{
|
||
if (Data[m]["rcount"] != null)
|
||
{
|
||
string rCount = Data[m]["rcount"].ToString();
|
||
rCount = rCount.Replace("\"", "");
|
||
if (rCount != "0")
|
||
pickDataArray.Append(rCount + "♣");
|
||
}
|
||
else if (Data[m]["fname"] != null)
|
||
{
|
||
fName = (string)Data[m]["fname"].ToString();
|
||
}
|
||
else
|
||
{
|
||
fValue = (string)Data[m]["fvalue"].ToString();
|
||
//Following Code was removing first and last character of fname and fvalue resulting in issues.. hence commented
|
||
//fName = fName.Remove(0, 1);
|
||
//fName = fName.Remove(fName.Length - 1, 1);
|
||
//fValue = fValue.Remove(0, 1);
|
||
//fValue = fValue.Remove(fValue.Length - 1, 1);
|
||
fValue = fValue.Replace("^^dq", "\"");
|
||
fValue = fValue.Replace(";bkslh", @"\");
|
||
string[] pickFldValues = fValue.Split('~');
|
||
for (int j = 0; j < pickFldValues.Length; j++)
|
||
{
|
||
if (j == 0)
|
||
pickDataArray.Append(pickFldValues[j].ToString());
|
||
else
|
||
pickDataArray.Append("¿" + pickFldValues[j].ToString());
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return pickDataArray.ToString();
|
||
}
|
||
#endregion
|
||
|
||
private void GetGlobalVars()
|
||
{
|
||
project = HttpContext.Current.Session["project"].ToString();
|
||
user = HttpContext.Current.Session["user"].ToString();
|
||
AxRole = HttpContext.Current.Session["AxRole"].ToString();
|
||
sessionid = HttpContext.Current.Session["nsessionid"].ToString();
|
||
}
|
||
|
||
public string GetIncludeDcsForLoad()
|
||
{
|
||
string includeDcs = string.Empty;
|
||
string depDcs = string.Empty;
|
||
DataRow dr = DsGetRow("axp_mustloaddc", "001");
|
||
if (dr != null)
|
||
depDcs = dr["axp_mustloaddc"].ToString();
|
||
return depDcs;
|
||
}
|
||
|
||
public void AddToFasDDl(string fName, string fJson)
|
||
{
|
||
if (fastDDL.ContainsKey(fName))
|
||
fastDDL.Remove(fName);
|
||
|
||
fastDDL.Add(fName, fJson);
|
||
}
|
||
|
||
#region New Indexing Methods
|
||
|
||
/// <summary>
|
||
/// Function loops through the dcs in the tstruct and for every dc adds the default fields into the field arrays.
|
||
/// </summary>
|
||
/// <param name="strObj"></param>
|
||
private void CreateDefaultFArray(TStructDef strObj)
|
||
{
|
||
foreach (TStructDef.DcStruct dc in strObj.dcs)
|
||
UpdateRowCount(dc.frameno.ToString(), "DC" + dc.frameno.ToString() + "~1");
|
||
}
|
||
|
||
/// <summary>
|
||
/// Function loops through the dcs in the tstruct and for every dc adds the default fields into the Data Table.
|
||
/// </summary>
|
||
/// <param name="strObj"></param>
|
||
private void CreateDataSets(TStructDef strObj)
|
||
{
|
||
DataSet ds = new DataSet("datacache");
|
||
// TODO: needs proper comment - Create a DataSet and put both tables in it.
|
||
foreach (TStructDef.DcStruct dc in strObj.dcs)
|
||
{
|
||
ds.Tables.Add(DSConstruct(dc.frameno, strObj));
|
||
ds.Tables.Add(DSConstructOld(dc.frameno, strObj));
|
||
ds.Tables.Add(DSSaveFalse(dc.frameno, strObj));
|
||
}
|
||
ds.Tables.Add(DSCreateDropDownTable());
|
||
dsDataSet = ds;
|
||
}
|
||
|
||
private DataTable DSCreateDropDownTable()
|
||
{
|
||
DataTable dtDropDownValue = new DataTable();
|
||
dtDropDownValue.TableName = "dsdropdown";
|
||
|
||
DataColumn[] keys1 = new DataColumn[1];
|
||
DataColumn column1 = dtDropDownValue.Columns.Add("dropdownkey");
|
||
keys1[0] = column1;
|
||
dtDropDownValue.PrimaryKey = keys1;
|
||
|
||
dtDropDownValue.Columns.Add("fldname");
|
||
dtDropDownValue.Columns.Add("axp__rowno");
|
||
dtDropDownValue.Columns.Add("rowvals");
|
||
dtDropDownValue.Columns.Add("dpmvalues");
|
||
dtDropDownValue.Columns.Add("dp");
|
||
dtDropDownValue.Columns.Add("mr");
|
||
dtDropDownValue.Columns.Add("idcol");
|
||
|
||
return dtDropDownValue;
|
||
}
|
||
|
||
private DataTable DSSaveFalse(int dcNo, TStructDef strObj)
|
||
{
|
||
TStructDef.DcStruct dc = (TStructDef.DcStruct)strObj.dcs[dcNo - 1];
|
||
DataTable dtObj = new DataTable("dc_savefalse" + dcNo.ToString());
|
||
DataColumn[] keys = new DataColumn[1];
|
||
DataColumn column;
|
||
string dcFldRange = strObj.GetDcFieldRange(dcNo.ToString());
|
||
string[] fldRange = dcFldRange.Split(',');
|
||
int startIndex = Convert.ToInt32(fldRange[0]);
|
||
int endIndex = Convert.ToInt32(fldRange[1]);
|
||
|
||
for (int j = startIndex; j <= endIndex; j++)
|
||
{
|
||
TStructDef.FieldStruct fld = (TStructDef.FieldStruct)strObj.flds[j];
|
||
|
||
if (fld.savevalue == false)
|
||
{
|
||
dtObj.Columns.Add(fld.name);
|
||
}
|
||
}
|
||
|
||
column = dtObj.Columns.Add("axp__rowno");
|
||
column.DataType = typeof(Int32);
|
||
keys[0] = column;
|
||
dtObj.PrimaryKey = keys;
|
||
|
||
return dtObj;
|
||
}
|
||
|
||
private DataTable DSConstructOld(int dcNo, TStructDef strObj)
|
||
{
|
||
TStructDef.DcStruct dc = (TStructDef.DcStruct)strObj.dcs[dcNo - 1];
|
||
DataTable dtOldObj = new DataTable("dc_old" + dcNo.ToString());
|
||
DataColumn[] keys = new DataColumn[1];
|
||
DataColumn column;
|
||
|
||
string dcFldRange = strObj.GetDcFieldRange(dcNo.ToString());
|
||
string[] fldRange = dcFldRange.Split(',');
|
||
int startIndex = Convert.ToInt32(fldRange[0]);
|
||
int endIndex = Convert.ToInt32(fldRange[1]);
|
||
|
||
for (int j = startIndex; j <= endIndex; j++)
|
||
{
|
||
TStructDef.FieldStruct fld = (TStructDef.FieldStruct)strObj.flds[j];
|
||
|
||
dtOldObj.Columns.Add("old__" + fld.name);
|
||
if (fld.savenormal)
|
||
dtOldObj.Columns.Add("oldid__" + fld.name);
|
||
}
|
||
|
||
column = dtOldObj.Columns.Add("axp__rowno");
|
||
column.DataType = typeof(Int32);
|
||
keys[0] = column;
|
||
dtOldObj.PrimaryKey = keys;
|
||
|
||
return dtOldObj;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Function to add every field in given dc into the field array and index array.
|
||
/// </summary>
|
||
/// <param name="dcNo"></param>
|
||
/// <param name="strObj"></param>
|
||
/// <param name="fldIdx"></param>
|
||
private DataTable DSConstruct(int dcNo, TStructDef strObj)
|
||
{
|
||
TStructDef.DcStruct dc = (TStructDef.DcStruct)strObj.dcs[dcNo - 1];
|
||
DataTable dtObj = new DataTable("dc" + dcNo.ToString());
|
||
|
||
DataColumn[] keys = new DataColumn[1];
|
||
DataColumn column;
|
||
|
||
string dcFldRange = strObj.GetDcFieldRange(dcNo.ToString());
|
||
string[] fldRange = dcFldRange.Split(',');
|
||
int startIndex = Convert.ToInt32(fldRange[0]);
|
||
int endIndex = Convert.ToInt32(fldRange[1]);
|
||
|
||
for (int j = startIndex; j <= endIndex; j++)
|
||
{
|
||
TStructDef.FieldStruct fld = (TStructDef.FieldStruct)strObj.flds[j];
|
||
dtObj.Columns.Add(fld.name);
|
||
//dtObj.Columns.Add("old__" + fld.name);
|
||
|
||
if (fld.savenormal)
|
||
{
|
||
dtObj.Columns.Add("id__" + fld.name);
|
||
//dtObj.Columns.Add("oldid__" + fld.name);
|
||
}
|
||
}
|
||
//dtObj.Columns.Add("axp_recid" + dcNo);
|
||
column = dtObj.Columns.Add("axp__rowno");
|
||
column.DataType = typeof(Int32);
|
||
keys[0] = column;
|
||
dtObj.PrimaryKey = keys;
|
||
dtObj.Columns.Add("axp__delrow");
|
||
if (dc.isgrid)
|
||
dtObj.Columns.Add(Constants.AXPISROWVALID + dcNo);
|
||
|
||
return dtObj;
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// Function which loop though each dc till the given dc and appends the field count.
|
||
/// </summary>
|
||
/// <param name="dcNo"></param>
|
||
/// <param name="strObj"></param>
|
||
/// <returns></returns>
|
||
private int GetDcIndex(int dcNo)
|
||
{
|
||
int fldCnt = 0;
|
||
foreach (TStructDef.DcStruct dc in tstStrObj.dcs)
|
||
{
|
||
if (dc.frameno >= dcNo)
|
||
break;
|
||
|
||
fldCnt += dc.fieldCount;
|
||
}
|
||
return fldCnt;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Function to calculate the index of the field in the fieldIndexArray
|
||
/// and return the value from that item of the fieldIndexArray.
|
||
/// </summary>
|
||
/// <param name="dcNo"></param>
|
||
/// <param name="fieldOrder"></param>
|
||
/// <param name="rowNo"></param>
|
||
/// <returns></returns>
|
||
public int GetFldIndex(int dcNo, string fldName, int rowNo)
|
||
{
|
||
int idx = 0;
|
||
int index = 0;
|
||
if (rowNo == 0) rowNo = 1;
|
||
foreach (TStructDef.DcStruct dc in tstStrObj.dcs)
|
||
{
|
||
if (dc.frameno >= dcNo)
|
||
break;
|
||
|
||
idx += GetDcRowCount(dc.frameno.ToString()) * dc.fieldCount;
|
||
}
|
||
|
||
TStructDef.DcStruct currentDC = (TStructDef.DcStruct)tstStrObj.dcs[dcNo - 1];
|
||
int fieldOrder = GetFieldOrder(fldName, dcNo, currentDC);
|
||
//Formula = idx + FieldCountInDC * (RowNo-1) + (FieldOrder - StartOrderInDC)
|
||
idx += currentDC.fieldCount * (rowNo - 1) + (fieldOrder - GetDcIndex(dcNo));
|
||
if (idx >= fieldIndexArray.Count) index = -1;
|
||
else
|
||
index = (Int32)fieldIndexArray[idx];
|
||
return index;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Function to get the field order for the given field in the given dc.
|
||
/// </summary>
|
||
/// <param name="fldName"></param>
|
||
/// <param name="dcNo"></param>
|
||
/// <param name="dc"></param>
|
||
/// <returns></returns>
|
||
private int GetFieldOrder(string fldName, int dcNo, TStructDef.DcStruct dc)
|
||
{
|
||
int fldOrd = 0;
|
||
string dcFldRange = tstStrObj.GetDcFieldRange(dcNo.ToString());
|
||
string[] fldRange = dcFldRange.Split(',');
|
||
int startIndex = Convert.ToInt32(fldRange[0]);
|
||
int endIndex = Convert.ToInt32(fldRange[1]);
|
||
|
||
for (int j = startIndex; j <= endIndex; j++)
|
||
{
|
||
TStructDef.FieldStruct fld = (TStructDef.FieldStruct)tstStrObj.flds[j];
|
||
if (fld.name == fldName)
|
||
{
|
||
fldOrd = j;
|
||
break;
|
||
}
|
||
}
|
||
return fldOrd;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Function to add or update the field arrays.
|
||
/// </summary>
|
||
/// <param name="name"></param>
|
||
/// <param name="fldId"></param>
|
||
/// <param name="rowNo"></param>
|
||
/// <param name="dcNo"></param>
|
||
/// <param name="value"></param>
|
||
/// <param name="oldValue"></param>
|
||
/// <param name="idCol"></param>
|
||
/// <param name="mr"></param>
|
||
/// <param name="rowVals"></param>
|
||
/// <param name="id"></param>
|
||
/// <param name="oldId"></param>
|
||
/// <param name="status"></param>
|
||
/// <param name="index"></param>
|
||
private void SubmitFieldInArrays(string value, string oldValue, string idCol, string mr, string rowVals, string id, string oldId, string dpmValues, string dp, int index)
|
||
{
|
||
fieldValue[index] = value;
|
||
fieldOldValue[index] = value;
|
||
fldIdCol[index] = idCol;
|
||
fldMasterRow[index] = mr;
|
||
fieldRowValues[index] = rowVals;
|
||
fieldOldIdValue[index] = oldId;
|
||
fieldIdValue[index] = id;
|
||
fieldDPMVals[index] = dpmValues;
|
||
fieldDPVals[index] = dp;
|
||
//StringToFile("Replace Values - FieldName-" + fieldName[index].ToString() + " Rowno- " + fieldRowNo[index].ToString() + " Value- " + value + " Index- " + index);
|
||
}
|
||
|
||
private void DSSubmit(string fldName, int rowNo, string value, string idValue)
|
||
{
|
||
int dcNo = tstStrObj.GetFieldDc(fldName);
|
||
if (dcNo == 0 && fldName.StartsWith(Constants.AXPISROWVALID))
|
||
{
|
||
dcNo = Convert.ToInt32(fldName.Substring(13));
|
||
}
|
||
if (rowNo == 0) rowNo = 1;
|
||
DataTable dt = dsDataSet.Tables["dc" + dcNo];
|
||
DataRow foundRow = dsDataSet.Tables["dc" + dcNo].Rows.Find(rowNo);
|
||
if (foundRow == null)
|
||
{
|
||
foundRow = dt.NewRow();
|
||
|
||
foundRow["axp__rowno"] = Convert.ToInt32(rowNo);
|
||
foundRow["axp__delrow"] = 0;
|
||
dt.Rows.Add(foundRow);
|
||
}
|
||
if (!fldName.StartsWith("axp_recid"))
|
||
foundRow[fldName] = value;
|
||
string axp_recId = foundRow["axp_recid" + dcNo].ToString();
|
||
foundRow["axp_recid" + dcNo] = axp_recId == "" ? "0" : axp_recId;
|
||
if (dt.Columns.Contains("id__" + fldName))
|
||
foundRow["id__" + fldName] = idValue;
|
||
|
||
dt.AcceptChanges();
|
||
}
|
||
|
||
private void DSSubmitDropDownValues(string fldName, int rowNo, string rowVals, string dpmValues, string dp, string mr, string idCol)
|
||
{
|
||
DataTable thisDataTable = dsDataSet.Tables["dsdropdown"];
|
||
if (rowNo == 0) rowNo = 1;
|
||
DataRow thisDataRow = thisDataTable.Rows.Find(fldName + "-" + rowNo);
|
||
|
||
if (thisDataRow == null)
|
||
{
|
||
thisDataRow = thisDataTable.NewRow();
|
||
thisDataRow["dropdownkey"] = fldName + "-" + rowNo;
|
||
thisDataRow["fldname"] = fldName;
|
||
thisDataRow["axp__rowno"] = rowNo;
|
||
thisDataTable.Rows.Add(thisDataRow);
|
||
}
|
||
thisDataRow["rowvals"] = rowVals;
|
||
thisDataRow["dpmvalues"] = dpmValues;
|
||
thisDataRow["dp"] = dp;
|
||
thisDataRow["mr"] = mr;
|
||
thisDataRow["idcol"] = idCol;
|
||
|
||
dsDataSet.AcceptChanges();
|
||
}
|
||
|
||
private void DSUpdateRowValues(string fldName, int rowNo, string rowVals, string dp, string masterRow, string idCol)
|
||
{
|
||
DataTable thisDataTable = dsDataSet.Tables["dsdropdown"];
|
||
if (rowNo == 0) rowNo = 1;
|
||
DataRow thisDataRow = thisDataTable.Rows.Find(fldName + "-" + rowNo);
|
||
|
||
if (thisDataRow == null)
|
||
{
|
||
thisDataRow = thisDataTable.NewRow();
|
||
thisDataRow["dropdownkey"] = fldName + "-" + rowNo;
|
||
thisDataRow["fldname"] = fldName;
|
||
thisDataRow["axp__rowno"] = rowNo;
|
||
thisDataRow["idcol"] = idCol;
|
||
thisDataTable.Rows.Add(thisDataRow);
|
||
}
|
||
thisDataRow["rowvals"] = rowVals;
|
||
thisDataRow["dp"] = dp;
|
||
thisDataRow["mr"] = masterRow;
|
||
|
||
dsDataSet.AcceptChanges();
|
||
}
|
||
public DataRow DSGetDropdownRow(string fldName, string rowNo)
|
||
{
|
||
DataTable thisDataTable = dsDataSet.Tables["dsdropdown"];
|
||
int rNo = Convert.ToInt32(rowNo);
|
||
if (rNo == 0) rNo = 1;
|
||
return thisDataTable.Rows.Find(fldName + "-" + rNo);
|
||
}
|
||
|
||
private void DSSubmitWithOld(string fldName, int rowNo, string value, string idValue, string oldIdValue)
|
||
{
|
||
int dcNo = tstStrObj.GetFieldDc(fldName);
|
||
if (dcNo == 0) return;
|
||
if (rowNo == 0) rowNo = 1;
|
||
DataTable dt = dsDataSet.Tables["dc" + dcNo];
|
||
DataRow foundRow = dsDataSet.Tables["dc" + dcNo].Rows.Find(rowNo);
|
||
|
||
if (foundRow == null)
|
||
{
|
||
foundRow = dt.NewRow();
|
||
|
||
foundRow["axp__rowno"] = rowNo;
|
||
foundRow["axp__delrow"] = 0;
|
||
dt.Rows.Add(foundRow);
|
||
}
|
||
foundRow[fldName] = value;
|
||
|
||
if (dt.Columns.Contains("id__" + fldName))
|
||
foundRow["id__" + fldName] = idValue;
|
||
|
||
dt.AcceptChanges();
|
||
|
||
DSSubmitOldValues(fldName, rowNo, value, idValue, oldIdValue);
|
||
}
|
||
|
||
private void DSSubmitOldValues(string fldName, int rowNo, string value, string idValue, string oldIdValue)
|
||
{
|
||
int dcNo = tstStrObj.GetFieldDc(fldName);
|
||
if (rowNo == 0) rowNo = 1;
|
||
|
||
DataTable dtOld = dsDataSet.Tables["dc_old" + dcNo];
|
||
DataRow drOld = dtOld.Rows.Find(rowNo);
|
||
if (drOld == null)
|
||
{
|
||
drOld = dtOld.NewRow();
|
||
|
||
drOld["axp__rowno"] = rowNo;
|
||
dtOld.Rows.Add(drOld);
|
||
}
|
||
drOld["old__" + fldName] = value;
|
||
if (dtOld.Columns.Contains("oldid__" + fldName))
|
||
drOld["oldid__" + fldName] = oldIdValue;
|
||
|
||
dtOld.AcceptChanges();
|
||
}
|
||
|
||
private void DSInsertRow(int dcNo, int rowNo)
|
||
{
|
||
DataTable DCTable = dsDataSet.Tables["dc" + dcNo];
|
||
for (int i = DCTable.Rows.Count - 1; i >= 0; i--)
|
||
{
|
||
DataRow thisrow = DCTable.Rows[i];
|
||
int thisRowNo = Convert.ToInt32(thisrow["axp__rowno"]);
|
||
if (thisRowNo < rowNo)
|
||
break;
|
||
thisrow["axp__rowno"] = thisRowNo + 1;
|
||
}
|
||
DataRow newRow = DCTable.NewRow();
|
||
newRow["axp__rowno"] = rowNo;
|
||
DCTable.Rows.Add(newRow);
|
||
DCTable.AcceptChanges();
|
||
dsDataSet.AcceptChanges();
|
||
}
|
||
|
||
/// <summary>
|
||
/// Function to delete all the rows in the given dc from the field arrays.
|
||
/// </summary>
|
||
/// <param name="dcNo"></param>
|
||
private void DeleteAllRowsInDc(string dcNo)
|
||
{
|
||
DSDeleteAllRows(dcNo);
|
||
}
|
||
|
||
private void DSDeleteAllRows(string dcNo)
|
||
{
|
||
int idx = AxDelDcNo.IndexOf("dc" + dcNo);
|
||
if (idx == -1)
|
||
AxDelDcNo.Add("dc" + dcNo);
|
||
|
||
StringBuilder strDelIds = new StringBuilder();
|
||
if (idx != -1)
|
||
strDelIds.Append(AxDelRecIds[idx].ToString());
|
||
DataTable DCTable = dsDataSet.Tables["dc" + dcNo];
|
||
|
||
for (int j = DCTable.Rows.Count; j > 0; j--)
|
||
{
|
||
DataRow foundRow = DCTable.Rows.Find(j);
|
||
if (foundRow != null)
|
||
{
|
||
if (strDelIds.ToString() == string.Empty)
|
||
strDelIds.Append(foundRow["axp_recid" + dcNo].ToString());
|
||
else
|
||
strDelIds.Append("," + foundRow["axp_recid" + dcNo].ToString());
|
||
}
|
||
DeleteRowInFldArrays(dcNo, j.ToString());
|
||
}
|
||
|
||
if (idx == -1)
|
||
AxDelRecIds.Add(strDelIds.ToString());
|
||
else
|
||
AxDelRecIds[idx] = strDelIds.ToString();
|
||
|
||
}
|
||
|
||
//Set the deleted rows from GetDependents, to the global array
|
||
private void SetPopDeletedRows(string dcNo, string delRecIds)
|
||
{
|
||
int idx = AxDelDcNo.IndexOf("dc" + dcNo);
|
||
if (idx == -1)
|
||
{
|
||
AxDelDcNo.Add("dc" + dcNo);
|
||
AxDelRecIds.Add(delRecIds);
|
||
}
|
||
else
|
||
{
|
||
AxDelRecIds[idx] = delRecIds;
|
||
}
|
||
}
|
||
|
||
public void DSDeleteRow(string dcNo, string rowNum)
|
||
{
|
||
DataTable DCTable = dsDataSet.Tables["dc" + dcNo];
|
||
DataTable DCOldTable = dsDataSet.Tables["dc_old" + dcNo];
|
||
|
||
int rNo = Convert.ToInt32(rowNum);
|
||
if (rNo == 0) rNo = 1;
|
||
DataRow foundRow = DCTable.Rows.Find(rNo);
|
||
DataRow oldRow = DCOldTable.Rows.Find(rNo);
|
||
|
||
DataTable DeletedRowsTable = dsDataSet.Tables["deldc" + dcNo];
|
||
if (DeletedRowsTable == null)
|
||
{
|
||
DeletedRowsTable = DCTable.Clone();
|
||
DeletedRowsTable.TableName = "deldc" + dcNo;
|
||
dsDataSet.Tables.Add(DeletedRowsTable);
|
||
}
|
||
|
||
if (foundRow != null)
|
||
{
|
||
DeletedRowsTable.ImportRow(foundRow);
|
||
DataRow DelTableRow = DeletedRowsTable.Rows.Find(rNo);
|
||
DelTableRow["axp__delrow"] = DelTableRow["axp__rowno"];
|
||
DelTableRow["axp__rowno"] = deletedCount--;
|
||
|
||
//copying delete contents to xml for sending to web service.
|
||
StringBuilder strDelRowFlds = new StringBuilder();
|
||
string axpRecidVal = "0";
|
||
string axpNode = string.Empty;
|
||
string[] dcRange = tstStrObj.GetDcFieldRange(dcNo).Split(',');
|
||
int startIdx = Convert.ToInt32(dcRange[0]);
|
||
int endIdx = Convert.ToInt32(dcRange[1]);
|
||
for (int j = startIdx; j <= endIdx; j++)
|
||
{
|
||
TStructDef.FieldStruct fld = (TStructDef.FieldStruct)tstStrObj.flds[j];
|
||
if (recordid != "0")
|
||
{
|
||
if (oldRow != null)
|
||
{
|
||
if (fld.name == "axp_recid" + dcNo)
|
||
{
|
||
axpNode = "<" + fld.name + ">" + CheckSpecialChars(oldRow["old__" + fld.name].ToString()) + "</" + fld.name + ">";
|
||
axpRecidVal = foundRow[fld.name].ToString();
|
||
}
|
||
else
|
||
{
|
||
strDelRowFlds.Append("<" + fld.name + ">" + CheckSpecialChars(oldRow["old__" + fld.name].ToString()) + "</" + fld.name + ">");
|
||
}
|
||
}
|
||
}
|
||
}
|
||
DelRowFldsXml.Add(axpRecidVal + "♦" + axpNode + strDelRowFlds.ToString());
|
||
|
||
foundRow.Delete();
|
||
DCTable.AcceptChanges();
|
||
DCTable.PrimaryKey = null;
|
||
DCTable = DeleteRowFalse(DCTable, DeletedRowsTable, dcNo);
|
||
int givenRow = Convert.ToInt32(rNo);
|
||
foreach (DataRow thisrow in DCTable.Rows)
|
||
{
|
||
int thisRowNo = Convert.ToInt32(thisrow["axp__rowno"]);
|
||
if (thisRowNo > givenRow)
|
||
thisrow["axp__rowno"] = thisRowNo - 1;
|
||
}
|
||
|
||
|
||
DCTable.PrimaryKey = new DataColumn[] { DCTable.Columns["axp__rowno"] };
|
||
|
||
if (oldRow != null)
|
||
{
|
||
oldRow.Delete();
|
||
DCOldTable.AcceptChanges();
|
||
}
|
||
|
||
DCOldTable.PrimaryKey = null;
|
||
foreach (DataRow thisrow in DCOldTable.Rows)
|
||
{
|
||
int thisRowNo = Convert.ToInt32(thisrow["axp__rowno"]);
|
||
if (thisRowNo > givenRow)
|
||
thisrow["axp__rowno"] = thisRowNo - 1;
|
||
}
|
||
DCOldTable.PrimaryKey = new DataColumn[] { DCOldTable.Columns["axp__rowno"] };
|
||
DSDeleteDropDown(dcNo, rowNum);
|
||
}
|
||
}
|
||
|
||
private void deleteRowOnSave()
|
||
{
|
||
try
|
||
{
|
||
for (int i = 0; i < deletedRowCount.Count; i++)
|
||
{
|
||
string dcNumber = deletedRowCount[i].ToString().Split('♦')[1];
|
||
string delRowNumber = (int.Parse(deletedRowCount[i].ToString().Split('♦')[0]) + 1).ToString();
|
||
DSDeleteRow(dcNumber, delRowNumber);
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{ }
|
||
}
|
||
|
||
private void UpdateGridDelRowVal(int dcNumner)
|
||
{
|
||
try
|
||
{
|
||
if (isDeletedRow)
|
||
{
|
||
int totRowCount = dsData.Tables["DC" + dcNumner].Rows.Count;
|
||
dsData.Tables["DC" + dcNumner].Rows[totRowCount - 1]["axp__isGrdVld" + dcNumner] = "";
|
||
dsData.Tables["DC" + dcNumner].AcceptChanges();
|
||
|
||
if (deletedRowCount.Count == 0)
|
||
{
|
||
deletedRowCount.Add(totRowCount + "♦" + dcNumner);
|
||
}
|
||
else
|
||
{
|
||
string checkValue = string.Join(",", deletedRowCount.Select(x => x.ToString()).ToList());
|
||
if (checkValue.IndexOf("♦" + dcNumner) != -1)
|
||
{
|
||
var prevValue = deletedRowCount.AsEnumerable().Where(x => x.Contains("♦" + dcNumner)).ToList();
|
||
deletedRowCount.Remove(prevValue[0]);
|
||
deletedRowCount.Add(totRowCount + "♦" + dcNumner);
|
||
}
|
||
else
|
||
{
|
||
deletedRowCount.Add(totRowCount + "♦" + dcNumner);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{ }
|
||
}
|
||
|
||
private DataTable DeleteRowFalse(DataTable DCTable, DataTable DeletedRowsTable, string dcNo)
|
||
{
|
||
try
|
||
{
|
||
isDeletedRow = true;
|
||
int delRowCount = DeletedRowsTable.Rows.Count;
|
||
int OrgRows = DCTable.Rows.Count;
|
||
if (delRowCount < OrgRows)
|
||
{
|
||
for (int i = 1; i <= delRowCount; i++)
|
||
{
|
||
bool flagRemff = true;
|
||
foreach (DataColumn dc in DCTable.Columns)
|
||
{
|
||
if (dc.ColumnName == "axp__rowno")
|
||
{
|
||
break;
|
||
}
|
||
else if (DCTable.Rows[OrgRows - i][dc].ToString() != "" && DCTable.Rows[OrgRows - i][dc].ToString() != "0")
|
||
{
|
||
flagRemff = false;
|
||
}
|
||
}
|
||
if (flagRemff)
|
||
{
|
||
DCTable.Rows[OrgRows - i]["axp__isGrdVld" + dcNo] = "false";
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
#region delete
|
||
int userValue = 0;
|
||
int ofrows = DCTable.Rows.Count;
|
||
for (int trc = 0; trc < DCTable.Rows.Count; trc++)
|
||
{
|
||
int dbValue = int.Parse(DCTable.Rows[trc]["axp__rowno"].ToString());
|
||
if (dbValue >= userValue)
|
||
{
|
||
userValue = dbValue;
|
||
DeleteRowTopNo = trc;
|
||
}
|
||
}
|
||
bool flagRem = true;
|
||
foreach (DataColumn dc in DCTable.Columns)
|
||
{
|
||
if (dc.ColumnName.ToLower() == "axp__rowno")
|
||
{
|
||
break;
|
||
}
|
||
else if (DCTable.Rows[DeleteRowTopNo][dc].ToString() != "" && DCTable.Rows[DeleteRowTopNo][dc].ToString() != "0")
|
||
{
|
||
flagRem = false;
|
||
}
|
||
}
|
||
if (flagRem)
|
||
{
|
||
int totRowCount = DCTable.Rows.Count;
|
||
if (totRowCount != 1 && totRowCount == ofrows)
|
||
{
|
||
DCTable.Rows[totRowCount - 1]["axp__isGrdVld" + dcNo] = "false";
|
||
DCTable.AcceptChanges();
|
||
}
|
||
}
|
||
#endregion
|
||
}
|
||
return DCTable;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
return DCTable;
|
||
}
|
||
}
|
||
|
||
//Function to delete all the sub grid rows after the get dep call.
|
||
private void DeletePopRowsAfterDep()
|
||
{
|
||
//AxSubGridRows will have dcno~1,2,3 in every item
|
||
for (int i = 0; i < AxSubGridRows.Count; i++)
|
||
{
|
||
string[] dcData = AxSubGridRows[i].ToString().Split('~');
|
||
string dcNo = dcData[0].ToString();
|
||
int delIdx = AxDelDcNo.IndexOf("dc" + dcNo);
|
||
|
||
//This code will add the dr attribute recids sent from the getdep, and store the deleted row information for save.
|
||
ArrayList delRecIds = new ArrayList();
|
||
if (delIdx != -1)
|
||
{
|
||
string[] delIds = AxDelRecIds[delIdx].ToString().Split(',');
|
||
for (int ind = 0; ind < delIds.Length; ind++)
|
||
{
|
||
if (delIds[ind].ToString() != string.Empty)
|
||
delRecIds.Add(delIds[ind].ToString());
|
||
}
|
||
}
|
||
|
||
string[] popRows = dcData[1].ToString().Split(',');
|
||
//This loop is reversed as the array will be sorted in asc order. and while deleting it should always be in desc order.
|
||
for (int j = popRows.Length - 1; j >= 0; j--)
|
||
{
|
||
if (popRows[j] != "")
|
||
{
|
||
string rowNum = popRows[j].ToString();
|
||
DataTable DCTable = dsDataSet.Tables["dc" + dcNo];
|
||
DataTable DCOldTable = dsDataSet.Tables["dc_old" + dcNo];
|
||
|
||
int rNo = Convert.ToInt32(rowNum);
|
||
if (rNo == 0) rNo = 1;
|
||
DataRow foundRow = DCTable.Rows.Find(rNo);
|
||
DataRow oldRow = DCOldTable.Rows.Find(rNo);
|
||
|
||
if (foundRow != null)
|
||
{
|
||
StringBuilder strDelRowFlds = new StringBuilder();
|
||
string axpRecidVal = "0";
|
||
string axpNode = string.Empty;
|
||
string[] dcRange = tstStrObj.GetDcFieldRange(dcNo).Split(',');
|
||
int startIdx = Convert.ToInt32(dcRange[0]);
|
||
int endIdx = Convert.ToInt32(dcRange[1]);
|
||
for (int k = startIdx; k <= endIdx; k++)
|
||
{
|
||
TStructDef.FieldStruct fld = (TStructDef.FieldStruct)tstStrObj.flds[k];
|
||
if (recordid != "0")
|
||
{
|
||
if (oldRow != null)
|
||
{
|
||
if (fld.name == "axp_recid" + dcNo)
|
||
{
|
||
axpNode = "<" + fld.name + ">" + CheckSpecialChars(oldRow["old__" + fld.name].ToString()) + "</" + fld.name + ">";
|
||
axpRecidVal = foundRow[fld.name].ToString();
|
||
}
|
||
else
|
||
{
|
||
strDelRowFlds.Append("<" + fld.name + ">" + CheckSpecialChars(oldRow["old__" + fld.name].ToString()) + "</" + fld.name + ">");
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if (delRecIds.IndexOf(axpRecidVal) != -1)
|
||
DelRowFldsXml.Add(axpRecidVal + "♦" + axpNode + strDelRowFlds.ToString());
|
||
|
||
|
||
foundRow.Delete();
|
||
DCTable.AcceptChanges();
|
||
DCTable.PrimaryKey = null;
|
||
int givenRow = Convert.ToInt32(rNo);
|
||
foreach (DataRow thisrow in DCTable.Rows)
|
||
{
|
||
int thisRowNo = Convert.ToInt32(thisrow["axp__rowno"]);
|
||
if (thisRowNo > givenRow)
|
||
thisrow["axp__rowno"] = thisRowNo - 1;
|
||
}
|
||
|
||
|
||
|
||
DCTable.PrimaryKey = new DataColumn[] { DCTable.Columns["axp__rowno"] };
|
||
|
||
if (oldRow != null)
|
||
{
|
||
oldRow.Delete();
|
||
DCOldTable.AcceptChanges();
|
||
}
|
||
|
||
DCOldTable.PrimaryKey = null;
|
||
foreach (DataRow thisrow in DCOldTable.Rows)
|
||
{
|
||
int thisRowNo = Convert.ToInt32(thisrow["axp__rowno"]);
|
||
if (thisRowNo > givenRow)
|
||
thisrow["axp__rowno"] = thisRowNo - 1;
|
||
}
|
||
DCOldTable.PrimaryKey = new DataColumn[] { DCOldTable.Columns["axp__rowno"] };
|
||
//DSDeleteDropDown(dcNo, rowNum);
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|
||
}
|
||
|
||
private void DSDeleteDropDown(string dcNo, string rowNum)
|
||
{
|
||
DataTable dsDropDown = dsDataSet.Tables["dsdropdown"];
|
||
if (dsDropDown == null) return;
|
||
int rNo = Convert.ToInt32(rowNum);
|
||
if (rNo == 0) rNo = 1;
|
||
|
||
StringBuilder strDelRowFlds = new StringBuilder();
|
||
string axpNode = string.Empty;
|
||
string[] dcRange = tstStrObj.GetDcFieldRange(dcNo).Split(',');
|
||
int startIdx = Convert.ToInt32(dcRange[0]);
|
||
int endIdx = Convert.ToInt32(dcRange[1]);
|
||
for (int j = startIdx; j <= endIdx; j++)
|
||
{
|
||
TStructDef.FieldStruct fld = (TStructDef.FieldStruct)tstStrObj.flds[j];
|
||
DataRow dr = dsDropDown.Rows.Find(fld.name + "-" + Convert.ToString(rNo));
|
||
if (dr != null)
|
||
{
|
||
bool Proceed = false;
|
||
if (dr["mr"].ToString() == "0") Proceed = true;
|
||
|
||
Proceed = Custom_CanDelRowInEsti(fld, dr["mr"].ToString(), dcNo, rowNum);
|
||
if (Proceed)
|
||
{
|
||
dr.Delete();
|
||
dsDropDown.AcceptChanges();
|
||
foreach (DataRow drRow in dsDropDown.Rows)
|
||
{
|
||
int rowNo = Convert.ToInt32(drRow["axp__rowno"]);
|
||
if (rowNo > rNo && fld.name == drRow["fldname"].ToString())
|
||
{
|
||
drRow["axp__rowno"] = rowNo - 1;
|
||
drRow["dropdownkey"] = fld.name + "-" + Convert.ToString(rowNo - 1);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
dsDropDown.AcceptChanges();
|
||
}
|
||
|
||
private bool Custom_CanDelRowInEsti(TStructDef.FieldStruct fld, string mr, string dcNo, string rowNum)
|
||
{
|
||
bool Proceed = false;
|
||
if (fld.name == "role") mr = "1";
|
||
if (fld.name == "activity")
|
||
{
|
||
Proceed = true;
|
||
}
|
||
if (mr == "0") Proceed = true;
|
||
return Proceed;
|
||
|
||
|
||
}
|
||
|
||
/// <summary>
|
||
/// Function to delete all the fields in the given row and dc from the field arrays.
|
||
/// </summary>
|
||
/// <param name="frameNo"></param>
|
||
/// <param name="rowNum"></param>
|
||
private void DeleteRowInFldArrays(string frameNo, string rowNum)
|
||
{
|
||
DSDeleteRow(frameNo, rowNum);
|
||
}
|
||
|
||
/// <summary>
|
||
/// Function to get the index of the given row and dc from the fieldindexarray.
|
||
/// </summary>
|
||
/// <param name="dcNo"></param>
|
||
/// <param name="rowNo"></param>
|
||
/// <returns></returns>
|
||
private int GetRowIndex(int dcNo, int rowNo)
|
||
{
|
||
int idx = 0;
|
||
if (rowNo == 0) rowNo = 1;
|
||
foreach (TStructDef.DcStruct dc in tstStrObj.dcs)
|
||
{
|
||
if (dc.frameno >= dcNo)
|
||
break;
|
||
|
||
idx += GetDcRowCount(dc.frameno.ToString()) * dc.fieldCount;
|
||
}
|
||
|
||
TStructDef.DcStruct currentDC = (TStructDef.DcStruct)tstStrObj.dcs[dcNo - 1];
|
||
//Formula = idx + FieldCountInDC * (RowNo-1) + (FieldOrder - StartOrderInDC)
|
||
idx += currentDC.fieldCount * (rowNo - 1);
|
||
return idx;
|
||
}
|
||
|
||
|
||
private void RefInMemOnSave()
|
||
{
|
||
try
|
||
{
|
||
if (tstStrObj.axp_inmemTids != String.Empty && (HttpContext.Current.Session["RapidTsTruct"] != null && HttpContext.Current.Session["RapidTsTruct"].ToString() == "true") && (HttpContext.Current.Session["AxIsPerfCode"] != null && HttpContext.Current.Session["AxIsPerfCode"].ToString().ToLower() == "true"))
|
||
{
|
||
string[] inMemTids = tstStrObj.axp_inmemTids.Split(',');
|
||
|
||
FDR fdrObj;
|
||
if (HttpContext.Current.Session["FDR"] != null)
|
||
fdrObj = (FDR)HttpContext.Current.Session["FDR"];
|
||
else
|
||
fdrObj = new FDR();
|
||
|
||
FDW fdwObj = FDW.Instance;
|
||
foreach (string Tid in inMemTids)
|
||
{
|
||
ArrayList arrKeys = fdrObj.GetPrefixedKeys(project + "-" + Tid + "-");
|
||
foreach (string key in arrKeys)
|
||
{
|
||
fdwObj.ClearRedisServerDataByKey(key, String.Empty, true);
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|
||
catch (Exception Ex)
|
||
{
|
||
|
||
}
|
||
}
|
||
|
||
#endregion
|
||
|
||
#region Json creation Functions
|
||
|
||
/// <summary>
|
||
/// Function to create json from the data arrays in the stored draft.
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public string CreateJsonForDraft()
|
||
{
|
||
StringBuilder draftJson = new StringBuilder();
|
||
StringBuilder dcJson = new StringBuilder();
|
||
draftJson.Append("{\"data\":[");
|
||
string tmpStr = string.Empty;
|
||
|
||
//loop for constructing the field value xml based on the frame no, row no and field order
|
||
foreach (TStructDef.DcStruct dc in tstStrObj.dcs)
|
||
{
|
||
string dcNo = Convert.ToString(dc.frameno);
|
||
|
||
DataTable thisDataTable = dsDataSet.Tables["dc" + dcNo];
|
||
if (dc.isgrid)
|
||
{
|
||
errlog = logobj.CreateLog("CreateJsonForDraft", sessionid, "CreateJson-tstData", "new");
|
||
try
|
||
{
|
||
DataRow[] rows;
|
||
rows = thisDataTable.Select("axp__isGrdVld" + dcNo + " = 'false'"); // axp__isGrdVld is Column Name
|
||
foreach (DataRow r in rows)
|
||
thisDataTable.Rows.Remove(r);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
errlog = logobj.CreateLog(ex.Message + ex.StackTrace, sessionid, "CreateJson-tstData", "");
|
||
}
|
||
}
|
||
string[] dcRange = tstStrObj.GetDcFieldRange(dcNo).Split(',');
|
||
|
||
int startIdx = Convert.ToInt32(dcRange[0]);
|
||
int endIdx = Convert.ToInt32(dcRange[1]);
|
||
|
||
int rowCnt = 0;
|
||
string cr = string.Empty;
|
||
if (dc.isgrid)
|
||
{
|
||
rowCnt = thisDataTable.Rows.Count;
|
||
cr = GetCrAttrJson(rowCnt);
|
||
}
|
||
tmpStr = "{\"n\":\"DC" + dcNo + "\",\"v\":\"" + rowCnt + "\", " + cr + " \"t\":\"dc\", \"hasdatarows\":\"" + (rowCnt > 0 && !string.IsNullOrEmpty(cr) ? "yes" : "no") + "\"}";
|
||
//construct dc json tag
|
||
//{"n":"DC1","v":"1","t":"dc"}
|
||
if (dcJson.ToString() == string.Empty)
|
||
dcJson.Append(tmpStr);
|
||
else
|
||
dcJson.Append("," + tmpStr);
|
||
|
||
foreach (DataRow dr in thisDataTable.Rows)
|
||
{
|
||
int rowNo = Convert.ToInt32(dr["axp__rowno"]);
|
||
for (int j = startIdx; j <= endIdx; j++)
|
||
{
|
||
TStructDef.FieldStruct fld = (TStructDef.FieldStruct)tstStrObj.flds[j];
|
||
dcJson.Append("," + GetFieldJson(rowNo.ToString(), dr, fld, thisDataTable));
|
||
}
|
||
}
|
||
//close here
|
||
}
|
||
draftJson.Append(dcJson + "]}");
|
||
|
||
return draftJson.ToString();
|
||
}
|
||
|
||
public string GetCurrTabStatus(string dcNo)
|
||
{
|
||
//DC1-1,DC2-2
|
||
string isTabOpened = "no";
|
||
dcNo = "DC" + dcNo;
|
||
if (!string.IsNullOrEmpty(TabDcStatus))
|
||
{
|
||
string[] dcAndStatusArray = TabDcStatus.Split(',');
|
||
foreach (string dcAndStatus in dcAndStatusArray)
|
||
{
|
||
string[] status = dcAndStatus.Split('-');
|
||
if (status[0].ToLower() == dcNo.ToLower())
|
||
{
|
||
if (status[1] == "1")
|
||
isTabOpened = "yes";
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
return isTabOpened;
|
||
}
|
||
|
||
public string GetTabDCJson(string dcNo)
|
||
{
|
||
StringBuilder draftJson = new StringBuilder();
|
||
StringBuilder dcJson = new StringBuilder();
|
||
draftJson.Append("{\"data\":[");
|
||
string tmpStr = string.Empty;
|
||
bool isGrid = ((TStructDef.DcStruct)tstStrObj.dcs[int.Parse(dcNo) - 1]).isgrid;
|
||
DataTable thisDataTable = dsDataSet.Tables["dc" + dcNo];
|
||
if (isGrid)
|
||
{
|
||
errlog = logobj.CreateLog("CreateJsonForDraft-GetTabDCJson", sessionid, "GetTabDCJson-tstData", "new");
|
||
try
|
||
{
|
||
DataRow[] rows;
|
||
rows = thisDataTable.Select("axp__isGrdVld" + dcNo + " = 'false'"); // axp__isGrdVld is Column Name
|
||
foreach (DataRow r in rows)
|
||
thisDataTable.Rows.Remove(r);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
errlog = logobj.CreateLog(ex.Message + ex.StackTrace, sessionid, "GetTabDCJson-tstData", "");
|
||
}
|
||
}
|
||
|
||
string[] dcRange = tstStrObj.GetDcFieldRange(dcNo).Split(',');
|
||
int startIdx = Convert.ToInt32(dcRange[0]);
|
||
int endIdx = Convert.ToInt32(dcRange[1]);
|
||
int rowCnt = 0;
|
||
string cr = string.Empty;
|
||
if (isGrid)
|
||
{
|
||
rowCnt = thisDataTable.Rows.Count;
|
||
cr = GetCrAttrJson(rowCnt);
|
||
}
|
||
|
||
tmpStr = "{\"n\":\"DC" + dcNo + "\",\"v\":\"" + rowCnt + "\", " + cr + " \"t\":\"dc\", \"hasdatarows\":\"" + (rowCnt > 0 && !string.IsNullOrEmpty(cr) ? "yes" : "no") + "\"}";
|
||
|
||
if (dcJson.ToString() == string.Empty)
|
||
dcJson.Append(tmpStr);
|
||
else
|
||
dcJson.Append("," + tmpStr);
|
||
|
||
|
||
foreach (DataRow dr in thisDataTable.Rows)
|
||
{
|
||
int rowNo = Convert.ToInt32(dr["axp__rowno"]);
|
||
for (int j = startIdx; j <= endIdx; j++)
|
||
{
|
||
TStructDef.FieldStruct fld = (TStructDef.FieldStruct)tstStrObj.flds[j];
|
||
dcJson.Append("," + GetFieldJson(rowNo.ToString(), dr, fld, thisDataTable));
|
||
}
|
||
}
|
||
|
||
draftJson.Append(dcJson + "]}");
|
||
return draftJson.ToString();
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// Function to get the cr attribute for the dc based on the rowcount.
|
||
/// </summary>
|
||
/// <param name="rowCnt"></param>
|
||
/// <returns></returns>
|
||
private string GetCrAttrJson(int rowCnt)
|
||
{
|
||
StringBuilder strCr = new StringBuilder();
|
||
for (int i = 1; i <= rowCnt; i++)
|
||
{
|
||
if (i == 1)
|
||
{
|
||
strCr.Append("\"cr\":");
|
||
strCr.Append("\"i" + i);
|
||
}
|
||
else
|
||
strCr.Append(",i" + i);
|
||
}
|
||
if (strCr.ToString() != string.Empty)
|
||
strCr.Append("\",");
|
||
return strCr.ToString();
|
||
}
|
||
|
||
/// <summary>
|
||
/// Function to get the field json based on its type.
|
||
/// </summary>
|
||
/// <param name="fieldName"></param>
|
||
/// <param name="rowNo"></param>
|
||
/// <param name="fldIndex"></param>
|
||
/// <param name="fld"></param>
|
||
/// <returns></returns>
|
||
private string GetFieldJson(string rowNo, DataRow dr, TStructDef.FieldStruct fld, DataTable dt)
|
||
{
|
||
string fieldName = fld.name;
|
||
string type = string.Empty;
|
||
string value = string.Empty;
|
||
string idVal = string.Empty;
|
||
string oldIdVal = string.Empty;
|
||
string mr = string.Empty;
|
||
string idCol = string.Empty;
|
||
string fldJson = string.Empty;
|
||
string strId = string.Empty;
|
||
string strComboValues = string.Empty;
|
||
string dpm = string.Empty;
|
||
|
||
DataRow dsDataRow = DSGetDropdownRow(fieldName, rowNo);
|
||
|
||
string fldRowVals = string.Empty;
|
||
string dpVals = string.Empty;
|
||
if (dsDataRow != null)
|
||
{
|
||
fldRowVals = dsDataRow["rowvals"].ToString();
|
||
dpVals = dsDataRow["dp"].ToString();
|
||
idCol = dsDataRow["idcol"].ToString();
|
||
mr = dsDataRow["mr"].ToString();
|
||
dpm = dsDataRow["dpmvalues"].ToString();
|
||
}
|
||
|
||
type = GetFieldType(fld);
|
||
value = dr[fld.name].ToString();
|
||
if (dt.Columns.Contains("id__" + fieldName))
|
||
idVal = dr["id__" + fld.name].ToString();
|
||
|
||
|
||
if (dt.Columns.Contains("oldid__" + fld.name))
|
||
oldIdVal = dr["oldid__" + fld.name].ToString();
|
||
|
||
|
||
if (rowNo == "1" && mr == "1" && AxMasterRowFlds.IndexOf(fieldName) == -1)
|
||
AxMasterRowFlds.Add(fieldName);
|
||
|
||
if (rowNo != "1" && AxMasterRowFlds.IndexOf(fieldName) != -1)
|
||
mr = "1";
|
||
|
||
if (mr != "1" && fld.fieldIsFrmList)
|
||
mr = "1";
|
||
|
||
if (mr != string.Empty)
|
||
mr = "\"mr\":\"" + mr + "\",";
|
||
|
||
if (idCol != string.Empty)
|
||
{
|
||
if (idCol == "0") idCol = "no";
|
||
else idCol = "yes";
|
||
idCol = "\"idcol\":\"" + idCol + "\",";
|
||
if (type == "s")
|
||
idCol = string.Empty;
|
||
}
|
||
|
||
if (type == "m")
|
||
value = value.Replace("\n", "<br>");
|
||
|
||
value = CheckSpecialCharsForClient(value);
|
||
|
||
strId = "\"id\":\"" + idVal + "\", \"oldid\":\"" + oldIdVal + "\",";
|
||
|
||
if (dpm != string.Empty)
|
||
dpm = "\"dpm\":\"" + dpm + "\",";
|
||
|
||
if (type == "c")
|
||
strComboValues = GetComboItemsJson(fldRowVals, dpVals);
|
||
|
||
//This is a dummy json example for dropdown
|
||
//{"n":"sponsor","v":"abc","r":"0","idcol":"yes","id":"10032000001017","oldid":"0","mr":"0","dpm":"suffix,title","t":"c"},
|
||
if (fld.savenormal)
|
||
fldJson = "{\"n\":\"" + fld.name + "\",\"v\":\"" + value + "\",\"r\":\"" + rowNo + "\"," + idCol + mr + strId + dpm + " \"t\":\"" + type + "\"}";
|
||
else
|
||
fldJson = "{\"n\":\"" + fld.name + "\",\"v\":\"" + value + "\",\"r\":\"" + rowNo + "\"," + idCol + mr + dpm + "\"t\":\"" + type + "\"}";
|
||
|
||
if (strComboValues != string.Empty)
|
||
fldJson = fldJson + "," + strComboValues;
|
||
return fldJson;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Function to get the json for the dv nodes for a given combo box.
|
||
/// </summary>
|
||
/// <param name="fldIndex"></param>
|
||
/// <returns></returns>
|
||
private string GetComboItemsJson(string fldRowValues, string fldDpValues)
|
||
{
|
||
StringBuilder strItems = new StringBuilder();
|
||
//sample json for dropdown item
|
||
//{"v":"15146000000000~EST-000274-Rev1","t":"dv","dp":"EST-000274~1~001~001~002"},
|
||
string[] choices = fldRowValues.Split('♣');
|
||
string[] dpValues = fldDpValues.Split('♣');
|
||
string tmpStr = string.Empty;
|
||
for (int i = 0; i < choices.Length; i++)
|
||
{
|
||
string strChoice = choices[i].ToString();
|
||
strChoice = CheckSpecialCharsForClient(strChoice);
|
||
if (strChoice != "" && i <= dpValues.Length)
|
||
{
|
||
tmpStr = "{\"v\":\"" + strChoice + "\", \"t\":\"dv\", \"dp\":\"" + dpValues[i].ToString() + "\"}";
|
||
if (strItems.ToString() == string.Empty)
|
||
strItems.Append(tmpStr);
|
||
else
|
||
strItems.Append("," + tmpStr);
|
||
}
|
||
}
|
||
return strItems.ToString();
|
||
}
|
||
|
||
private string CheckSpecialCharsForClient(string value)
|
||
{
|
||
//single quote is handled in the tstruct.aspx.cs file before renddering the json to client.
|
||
//Hence handling only double quote and backward slash.
|
||
//fValue = fValue.Replace("^^dq", "\"");
|
||
//fValue = fValue.Replace(";bkslh", "\\");
|
||
value = value.Replace("\"", "^^dq");
|
||
value = value.Replace("\\", ";bkslh");
|
||
return value;
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// Function to get the field type of the given field and return the type attribute 't' in the json.
|
||
/// </summary>
|
||
/// <param name="fld"></param>
|
||
/// <returns></returns>
|
||
private string GetFieldType(TStructDef.FieldStruct fld)
|
||
{
|
||
string type = string.Empty;
|
||
type = fld.ctype.ToUpper();
|
||
string moe = string.Empty;
|
||
|
||
if (fld.moe.ToLower() == "select")
|
||
{
|
||
if (fld.editcombo)
|
||
return "s";
|
||
else
|
||
return "c";
|
||
}
|
||
else
|
||
{
|
||
switch (type)
|
||
{
|
||
case "CHECK LIST":
|
||
return "cl";
|
||
case "MEMO":
|
||
return "m";
|
||
case "IMAGE":
|
||
return "i";
|
||
case "CHECK BOX":
|
||
return "s";
|
||
default:
|
||
if (type.IndexOf("AXPBUTTON") != -1)
|
||
return "b";
|
||
else
|
||
return "s";
|
||
|
||
}
|
||
}
|
||
}
|
||
|
||
#endregion
|
||
|
||
public string GetFieldSqlQuery(string fldName, string fldValues, string globalVar, string userVars, int activeRow, string parentFlds)
|
||
{
|
||
int fldidx = tstStrObj.GetFieldIndex(fldName);
|
||
TStructDef.FieldStruct fld = (TStructDef.FieldStruct)tstStrObj.flds[fldidx];
|
||
string sqlQuery = fld.fieldSqlQuery;
|
||
string sqlParamsXML = string.Empty, appVarTypes = string.Empty, parentFldVals = string.Empty;
|
||
try
|
||
{
|
||
sqlQuery = "<sqltext>" + CheckSpecialChars(sqlQuery) + "</sqltext>";
|
||
fldValues = "<fldXML>" + fldValues + "</fldXML>";
|
||
XmlDocument xmlDoc = new XmlDocument();
|
||
xmlDoc.LoadXml(fldValues);
|
||
sqlParamsXML += "<globalvars>";
|
||
// in cluase paramets for grid field {invioceno*} for non grid field {invioceno}
|
||
if (Regex.Match(sqlQuery.ToLower(), @"{\b\w+\b}", RegexOptions.IgnoreCase).Success || Regex.Match(sqlQuery.ToLower(), @"{\b\w+\b\*}", RegexOptions.IgnoreCase).Success)
|
||
{
|
||
MatchCollection matchListSt = Regex.Matches(sqlQuery, @"{\b\w+\b\*}");
|
||
var listSt = matchListSt.Cast<Match>().Select(match => match.Value).Distinct().ToList();
|
||
MatchCollection matchList = Regex.Matches(sqlQuery, @"{\b\w+\b}");
|
||
var list = matchList.Cast<Match>().Select(match => match.Value).Distinct().ToList();
|
||
if (listSt.Count > 0)
|
||
{
|
||
foreach (var lst in listSt)
|
||
{
|
||
string strFld = lst.Split('{')[1].Split('*')[0];
|
||
XmlNodeList slctNode = xmlDoc.SelectNodes("fldXML/" + strFld + "");
|
||
int ic = 0;
|
||
string stFldValue = string.Empty;
|
||
foreach (XmlElement strText in slctNode)
|
||
{
|
||
if (strText.InnerText != "")
|
||
stFldValue += strText.InnerText + "~";
|
||
if (ic == 0)
|
||
{
|
||
int fldidxs = tstStrObj.GetFieldIndex(strFld);
|
||
TStructDef.FieldStruct flds = (TStructDef.FieldStruct)tstStrObj.flds[fldidxs];
|
||
if (flds.datatype == "Character" || flds.datatype == "Text")
|
||
appVarTypes += "c";
|
||
else if (flds.datatype == "Numeric")
|
||
appVarTypes += "n";
|
||
else if (flds.datatype == "Date/Time")
|
||
appVarTypes += "d";
|
||
}
|
||
ic++;
|
||
}
|
||
if (stFldValue != string.Empty)
|
||
stFldValue = stFldValue.Remove(stFldValue.Length - 1);
|
||
sqlParamsXML += "<" + strFld + ">" + stFldValue + "</" + strFld + ">";
|
||
parentFldVals += strFld + ":" + stFldValue + "~";
|
||
}
|
||
}
|
||
if (list.Count > 0)
|
||
{
|
||
foreach (var lst in list)
|
||
{
|
||
string strFld = lst.Split('{')[1].Split('}')[0];
|
||
sqlParamsXML += xmlDoc.SelectSingleNode("fldXML/" + strFld + "").OuterXml;
|
||
parentFldVals += strFld + ":" + xmlDoc.SelectSingleNode("fldXML/" + strFld + "").InnerXml + "~";
|
||
int fldidxs = tstStrObj.GetFieldIndex(strFld);
|
||
TStructDef.FieldStruct flds = (TStructDef.FieldStruct)tstStrObj.flds[fldidxs];
|
||
if (flds.datatype == "Character" || flds.datatype == "Text")
|
||
appVarTypes += "c";
|
||
else if (flds.datatype == "Numeric")
|
||
appVarTypes += "n";
|
||
else if (flds.datatype == "Date/Time")
|
||
appVarTypes += "d";
|
||
}
|
||
}
|
||
}
|
||
if (sqlQuery.Contains(":"))// to check any of tstruct fields & global Vars
|
||
{
|
||
if (Regex.Match(sqlQuery, String.Format(@":\b{0}\b", "recordid"), RegexOptions.IgnoreCase).Success)
|
||
{
|
||
if (xmlDoc.InnerText != "")
|
||
{
|
||
//sqlParamsXML += xmlDoc.SelectSingleNode("fldXML/axp_recid1").OuterXml;
|
||
string StrRecId = xmlDoc.SelectSingleNode("fldXML/axp_recid1").OuterXml;
|
||
StrRecId = StrRecId.Replace("axp_recid1", "recordid");
|
||
sqlParamsXML += StrRecId;
|
||
parentFldVals += "recordid:" + xmlDoc.SelectSingleNode("fldXML/axp_recid1").InnerXml + "~";
|
||
}
|
||
else
|
||
{
|
||
sqlParamsXML += "recordid";
|
||
parentFldVals += "recordid:0~";
|
||
}
|
||
int fldidxs = tstStrObj.GetFieldIndex("axp_recid1");
|
||
TStructDef.FieldStruct flds = (TStructDef.FieldStruct)tstStrObj.flds[fldidxs];
|
||
if (flds.datatype == "Character" || flds.datatype == "Text")
|
||
appVarTypes += "c";
|
||
else if (flds.datatype == "Numeric")
|
||
appVarTypes += "n";
|
||
else if (flds.datatype == "Date/Time")
|
||
appVarTypes += "d";
|
||
}
|
||
foreach (XmlNode parms in xmlDoc.ChildNodes[0].ChildNodes)
|
||
{
|
||
if (Regex.Match(sqlQuery, String.Format(@":\b{0}\b", parms.Name.ToString()), RegexOptions.IgnoreCase).Success)
|
||
{
|
||
int fldidxs = tstStrObj.GetFieldIndex(parms.Name);
|
||
TStructDef.FieldStruct flds = (TStructDef.FieldStruct)tstStrObj.flds[fldidxs];
|
||
bool isDcGrid = false;
|
||
isDcGrid = IsDcGrid(flds.fldframeno.ToString(), tstStrObj);
|
||
if (isDcGrid == true && int.Parse(parms.Attributes["rowno"].Value) == activeRow)
|
||
{
|
||
sqlParamsXML += parms.OuterXml;
|
||
parentFldVals += parms.Name + ":" + parms.InnerXml + "~";
|
||
if (flds.datatype == "Character" || flds.datatype == "Text")
|
||
appVarTypes += "c";
|
||
else if (flds.datatype == "Numeric")
|
||
appVarTypes += "n";
|
||
else if (flds.datatype == "Date/Time")
|
||
appVarTypes += "d";
|
||
}
|
||
else if (isDcGrid == false)
|
||
{
|
||
sqlParamsXML += parms.OuterXml;
|
||
parentFldVals += parms.Name + ":" + parms.InnerXml + "~";
|
||
if (flds.datatype == "Character" || flds.datatype == "Text")
|
||
appVarTypes += "c";
|
||
else if (flds.datatype == "Numeric")
|
||
appVarTypes += "n";
|
||
else if (flds.datatype == "Date/Time")
|
||
appVarTypes += "d";
|
||
}
|
||
}
|
||
}
|
||
XmlDocument xmlDocgbl = new XmlDocument();
|
||
xmlDocgbl.LoadXml(globalVar);
|
||
string blgAppVar = string.Empty;
|
||
if (xmlDocgbl.SelectSingleNode("globalvars/appvartypes") != null)
|
||
blgAppVar = xmlDocgbl.SelectSingleNode("globalvars/appvartypes").InnerXml;
|
||
int gblIcnt = 1;
|
||
foreach (XmlNode parms in xmlDocgbl.ChildNodes[0].ChildNodes)
|
||
{
|
||
if (Regex.Match(sqlQuery, String.Format(@":\b{0}\b", parms.Name.ToString()), RegexOptions.IgnoreCase).Success && parms.Name != "appvartypes" && !Regex.Match(sqlParamsXML, System.String.Format(@"<\b{0}\b", parms.Name.ToString()), RegexOptions.IgnoreCase).Success)
|
||
{
|
||
sqlParamsXML += parms.OuterXml;
|
||
parentFldVals += parms.Name + ":" + parms.InnerXml + "~";
|
||
if (blgAppVar.Length >= gblIcnt)
|
||
appVarTypes += blgAppVar[gblIcnt - 1].ToString();
|
||
else if (blgAppVar.Length < gblIcnt)
|
||
appVarTypes += "c";
|
||
}
|
||
gblIcnt++;
|
||
}
|
||
|
||
XmlDocument xmlDocUv = new XmlDocument();
|
||
xmlDocUv.LoadXml(userVars);
|
||
foreach (XmlNode parms in xmlDocUv.ChildNodes[0].ChildNodes)
|
||
{
|
||
if (Regex.Match(sqlQuery, String.Format(@":\b{0}\b", parms.Name.ToString()), RegexOptions.IgnoreCase).Success)
|
||
{
|
||
sqlParamsXML += parms.OuterXml;
|
||
parentFldVals += parms.Name + ":" + parms.InnerXml + "~";
|
||
appVarTypes += "c";
|
||
}
|
||
}
|
||
}
|
||
if (sqlParamsXML != "<globalvars>")
|
||
sqlParamsXML += "<appvartypes>" + appVarTypes + "</appvartypes>";
|
||
sqlParamsXML += "</globalvars>";
|
||
if (activeRow == 0)
|
||
{
|
||
string SessAutKey = "autocomplete♦" + transid + "-" + fldName + "-" + parentFlds;
|
||
HttpContext.Current.Session[SessAutKey] = sqlQuery + sqlParamsXML + "♠" + parentFldVals;
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
}
|
||
return sqlQuery + sqlParamsXML + "♠" + parentFldVals;
|
||
}
|
||
}
|
||
#endregion
|