#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
///
/// 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.
///
[Serializable()]
public class TStructData
{
#region Attributes
///
/// Declaration of all attributes related to Tstruct Data Class
///
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 deletedRowCount = new List();
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 fastDDL = new Dictionary();
int DeleteRowTopNo = 0;
#endregion
#region Attributes with get,set properties.
///
/// Attributes with get, set properties.
///
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.
///
/// Constructor which gets the JsonData from the service and updates all the field related information
/// to the array list by parsing through json data.
///
///
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 values = JsonConvert.DeserializeObject>(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
///
/// 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.
///
///
/// fldArray consists the updated/new component names.
///
///
/// fldValueArray consists the updated/new component values.
///
///
/// 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.
///
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);
}
///
/// 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.
///
///
/// fldArray consists the updated/new component names.
///
///
/// fldValueArray consists the updated/new component values.
///
///
/// 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.
///
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;
}
///
/// Function to get the deleted row info from the server side deleted rows.
///
///
///
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("");
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("");
}
return strRows.ToString();
}
private string GetChangedRows(string changedRows)
{
StringBuilder strRows = new StringBuilder();
string[] chngRowStr = changedRows.Split('~');
if (changedRows != "")
{
strRows.Append("");
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("");
}
else if (recordID == "0")
strRows.Append("*");
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().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().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().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().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().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 = " ";
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 + "";
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 += "";
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 += "" + tstData.fldValueXml + "";
inputXml += HttpContext.Current.Session["axApps"].ToString() + HttpContext.Current.Application["axProps"].ToString() + HttpContext.Current.Session["axGlobalVars"].ToString() + HttpContext.Current.Session["axUserVars"].ToString() + "";
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("axp__delrow") == iDelrow.ToString()).Select(s => s.Field("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);
}
}
}
}
}
}
}
///
/// Function to get a non grid field's value.
///
///
///
///
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);
}
}
}
///
/// Function to be called to add group
///
///
///
///
///
///
///
///
///
///
///
///
///
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 + "" + delRows + cngRows;
s += HttpContext.Current.Session["axApps"].ToString();
s += HttpContext.Current.Application["axProps"].ToString() + HttpContext.Current.Session["axGlobalVars"].ToString() + HttpContext.Current.Session["axUserVars"].ToString() + "";
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("" + delRows + cngRows;
s += HttpContext.Current.Session["axApps"].ToString();
s += HttpContext.Current.Application["axProps"].ToString() + HttpContext.Current.Session["axGlobalVars"].ToString() + HttpContext.Current.Session["axUserVars"].ToString() + "";
}
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(" IncludeDcRows = new Dictionary();
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 += "";
//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("");
List 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("" + HttpContext.Current.Session["user"].ToString() + "");
paramsNode.Append("");
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 IncludeDcRows = new Dictionary();
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 += "";
//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(" 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 += "";
//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 += "";
//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 += "";
#region Data cache in session
//var dcFsg = tstStrObj.fgs.Cast().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;
}
///
/// Function to return the Fill pop up html for the format fill grid.
///
///
///
///
///
///
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 + "| " + hdrNode.Name + " | ";
}
cRows = cRows + " | ";
}
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 + " | " + cRows + "
";
}
else
fgRows = fgRows + " | " + cRows + "
";
cRows = "";
chkboxVal = "";
}
if (fgRows.ToString() != "")
{
if (src == "add")
//fgHTML = "";
fgHTML = "
";
else
//fgHTML = "
";
fgHTML = "
";
else
{
if (dc.Action == "")
fgHTML += "
";
else
fgHTML += "
";
}
}
else
fgHTML = "
";
return fgHTML;
}
///
/// Function to check if the key column value already exists in the field arrays.
///
///
///
///
///
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;
}
///
/// Function to return the index of the fill grid from the fill grid struct.
///
///
///
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;
}
///
/// Function to construct the fill grid pop up html for the given dc.
///
///
///
///
///
///
///
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 = "
";
else
fgHTML = "
";
}
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
headerCaption = new List();
List headerNode = new List();
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 + "" + hdrNode.InnerText + " | ";
else
headRow = headRow + "" + hdrNode.InnerText + " | ";
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 + " | ";
else
cRows = cRows + " | ";
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(ExitFld[i].ToString()) == ExitFldVal[i].ToString()).CopyToDataTable();
rowExit = true;
}
catch (Exception ex)
{
rowExit = false;
break;
}
}
if (!rowExit)
fgRows = fgRows + " | " + cRows + "
";
else
allrowSelected = true;
}
else
fgRows = fgRows + " | " + cRows + "
";
cRows = "";
chkboxVal = "";
}
if (fgRows.ToString() != "")
{
//fgHTML = "";
fgHTML = "
";
fgHTML += "*♠*" + fgtlhw;
}
else if (allrowSelected)
fgHTML = "
";
else
fgHTML = "
";
}
return fgHTML;
}
///
/// Function to get the fill grid data for the selected rows in the fill grid pop up.
///
///
///
///
///
///
///
///
///
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 += "
" + WsPerfAddRowLoadDc(dcNo, "FillGrid") + memVarsData + "" + HttpContext.Current.Session["axApps"].ToString();
s += HttpContext.Current.Application["axProps"].ToString() + HttpContext.Current.Session["axGlobalVars"].ToString() + HttpContext.Current.Session["axUserVars"].ToString() + "";
//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() + "";
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() + "";
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() + "";
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("
";
return frmDetails;
}
public string CallGetFormLoad(TStructData tstData, string errorLog)
{
string result = null;
string visibleDCs = string.Empty;
visibleDCs = tstStrObj.GetVisibleDCs();
string loadXml = "";
loadXml += HttpContext.Current.Session["axApps"].ToString() + HttpContext.Current.Application["axProps"].ToString() + HttpContext.Current.Session["axGlobalVars"].ToString() + HttpContext.Current.Session["axUserVars"].ToString();
loadXml += "";
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 = " ";
loadXml += HttpContext.Current.Session["axApps"].ToString() + HttpContext.Current.Application["axProps"].ToString() + HttpContext.Current.Session["axGlobalVars"].ToString() + HttpContext.Current.Session["axUserVars"].ToString();
loadXml += "";
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
///
/// Function to update the decimal value for the given field in the structure xml
///
///
///
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;
}
}
}
}
}
///
/// Function to check if the field is axpcurrencydec and call update struct xml
///
///
///
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);
}
}
///
/// 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.
///
///
///
/// It returns the imagename along with the source value for the image, which is set in the client function
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 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 lstParams = new List();
lstParams.AddRange(arrParams);
string[] arrParAllRows = Parfld.FldRapidAllRows.Split(',');
List lstParAllRows = new List();
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[] { "", "", "
", "", "", "", "", "", "", "", "", "", "", "", "", "", "" };
string[] rtfTags = new string[] { "", "", "
", "", "", "", "", "", "", "", "", "", "", "
", "", "" };
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 with new line in fast report
if (strNode == "
" || strNode == "
")
{
//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[] { "", 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("" + rCnt + "");
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();
}
///
///
///
/// NG
///
///
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("" + rCnt + "");
}
//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 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();
}
///
/// This method loops through the lists and construct the field value xml.
/// and updates the object variable “PopfieldValueXml”.
///
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("");
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("");
popFGFieldValueXml = "" + popFldXml.ToString() + "
" + "" + fgFieldValueXml.ToString() + "";
}
///
/// function for replacing the special characters in a given string.
///
///
///
///
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", "
");
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;
}
}
///
/// This method for for updating the existing field values and adding any new values.
/// Note: Only grid field values can be added and deleted.
///
///
///
///
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;
}
///
/// Function to parse the memvar node from the json and update the memvar arrays
///
///
///
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 values = JsonConvert.DeserializeObject>(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();
}
}
}
///
/// Function to construct the field value xml for memvar nodes from the arrays
///
public void ConstructMemVarNode()
{
StringBuilder strXml = new StringBuilder();
//strXml.Append("");
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("");
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 values = JsonConvert.DeserializeObject>(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;
}
///
/// Function return true if the given dc is a parent dc.
///
///
///
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;
}
///
/// Function returns array of popdcs defined for a given dc.
///
///
///
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;
}
///
/// Function to get the non grid expression dependents for a field.
///
///
///
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;
}
///
/// Function to get the dependent grid dc for a given field.
///
///
///
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 values = JsonConvert.DeserializeObject>(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;
}
///
/// Function to get the fields index from the fieldControlName array.
///
///
///
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() + "";
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 += "";
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 += "";
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 += "";
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 += "";
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 += "";
//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 += "";
//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
///
/// Function to call the webservice which returns the filtered value for the picklist field.
///
///
///
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 += "";
//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 IncludeDcRows = new Dictionary();
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);
}
}
}
///
/// Function to parse the result of GetSearchResult service and construct the result string and return to the client.
///
///
///
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
///
/// Function loops through the dcs in the tstruct and for every dc adds the default fields into the field arrays.
///
///
private void CreateDefaultFArray(TStructDef strObj)
{
foreach (TStructDef.DcStruct dc in strObj.dcs)
UpdateRowCount(dc.frameno.ToString(), "DC" + dc.frameno.ToString() + "~1");
}
///
/// Function loops through the dcs in the tstruct and for every dc adds the default fields into the Data Table.
///
///
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;
}
///
/// Function to add every field in given dc into the field array and index array.
///
///
///
///
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;
}
///
/// Function which loop though each dc till the given dc and appends the field count.
///
///
///
///
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;
}
///
/// Function to calculate the index of the field in the fieldIndexArray
/// and return the value from that item of the fieldIndexArray.
///
///
///
///
///
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;
}
///
/// Function to get the field order for the given field in the given dc.
///
///
///
///
///
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;
}
///
/// Function to add or update the field arrays.
///
///
///
///
///
///
///
///
///
///
///
///
///
///
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();
}
///
/// Function to delete all the rows in the given dc from the field arrays.
///
///
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;
}
///
/// Function to delete all the fields in the given row and dc from the field arrays.
///
///
///
private void DeleteRowInFldArrays(string frameNo, string rowNum)
{
DSDeleteRow(frameNo, rowNum);
}
///
/// Function to get the index of the given row and dc from the fieldindexarray.
///
///
///
///
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
///
/// Function to create json from the data arrays in the stored draft.
///
///
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();
}
///
/// Function to get the cr attribute for the dc based on the rowcount.
///
///
///
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();
}
///
/// Function to get the field json based on its type.
///
///
///
///
///
///
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", "
");
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;
}
///
/// Function to get the json for the dv nodes for a given combo box.
///
///
///
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;
}
///
/// Function to get the field type of the given field and return the type attribute 't' in the json.
///
///
///
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 = "" + CheckSpecialChars(sqlQuery) + "";
fldValues = "" + fldValues + "";
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(fldValues);
sqlParamsXML += "";
// 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().Select(match => match.Value).Distinct().ToList();
MatchCollection matchList = Regex.Matches(sqlQuery, @"{\b\w+\b}");
var list = matchList.Cast().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 != "")
sqlParamsXML += "" + appVarTypes + "";
sqlParamsXML += "";
if (activeRow == 0)
{
string SessAutKey = "autocomplete♦" + transid + "-" + fldName + "-" + parentFlds;
HttpContext.Current.Session[SessAutKey] = sqlQuery + sqlParamsXML + "♠" + parentFldVals;
}
}
catch (Exception ex)
{
}
return sqlQuery + sqlParamsXML + "♠" + parentFldVals;
}
}
#endregion