Show By Category

.NET Service (1) 1909 (1) ACTV (1) adidas (47) adizero (1) Admiral (9) Airness (3) Albania (3) Algeria (3) America Mineiro (1) Angola (1) Anta (2) Argentina (2) Armenia (1) Atletico Goianiense (1) Atletico Paranaense (1) Austria (2) Authentic fit (1) Auto Generate from Access (1) Avai FC (1) avoid (2) Bahia (1) Beijing Guoan (1) Belgium (4) Benin (1) Birmingham City (1) Bolivia (1) Boot Configuration Data missing (1) Bosnia (1) Botafogo (2) Botafogo SP (1) Botswana (2) Brazil (4) Brazilian brand (15) Bulgaria (2) Burkina Faso (2) Burrda (3) Bypass traverse checking (1) Cambodia (1) Cameroon (4) Cape Verde (1) Castore (1) Ceara (1) CEWP (2) Chapecoense (2) Chile (3) China (9) Chinese Brand (4) Chongqing Lifan Dangdai (1) Club Deportivo Universidad Catolica (1) Club Universitario de Deportes (1) Clube de Remo (1) Colombia (6) Colombian Brand (1) Congo DR (1) Congo Rep (1) Copa America (3) Corinthians (1) Coritiba (1) Costa Rica (2) Cote d'Ivoire (3) Coventry City (1) Croatia (2) Crop IFRAME (1) Cruzeiro (2) Crystal Palace (4) css (3) Cuba (1) Cyprus (1) Czech Republic (2) Deleting large libraries (2) Denmark (2) design fault (2) Diadora (1) Dragao Premium (1) eagles (1) Ecuador (3) Ecuadorian Brand (3) Egypt (1) El Salvador (1) electrical (2) electrical problems (2) electrocuted (2) England (3) Errea (3) Espanyol (1) Ethiopia (1) Euro 16 (10) Excel 2010 (3) External Content Type (1) FBT (3) FC Porto (1) Fenerbahce (1) Figueirense (1) Finland (1) Fiorentina (1) Flamengo (1) Flickering (1) Fluminense (1) football (234) Football (1) Fortuna Dusseldorf (1) France (2) futfanatics.net (1) Gabon (1) Germany (1) Ghana (2) Gogoalshop (2) Goias (1) Granada CF (1) Grand Sport (2) Greece (2) Green (1) Guangzhou Evergrande (1) Guinea (1) Guinea Bissau (1) Haiti (1) Heilongjiang Lava Spring (1) Honduras (1) Hong Kong (1) Hummel (1) Hungary (1) Iceland (3) Icone Sports (2) IE Developer Tools (1) India (1) Indian Brand (1) Internal Field Names (1) Italy (2) Jako (1) Jamaica (2) Japan (1) Javascript (6) Jersey (126) Jiangsu Suning FC (1) Joma (5) Kanxa (1) Kappa (3) Kelme (4) Kenya (1) kitchen extractor fan (3) Korea (1) Laos (1) Le Coq Sportif (1) leak (2) Legea (1) Levante (1) Li Ning (3) Local Security Policy (1) Login Problem (1) Lotto (4) Lupo (2) Macron (9) Mafro (3) Mali (3) Man Utd (1) Marathon Sports (6) Marseilles (1) masterpage (1) Meizhou Hakka (1) Mexico (5) Modena Volley (1) Montenegro (1) Morocco (3) Myanmar (1) N98 (1) Naija (1) Nakal (1) Namibia (1) Napoli (1) Netherlands (1) New Balance (2) Newcastle United (3) Niger (1) Nigeria (4) Nike (32) Nike Brasil (1) Nike Brazil (1) Nike China (12) Nike South Africa (1) North Macedonia (1) Norway (1) O'Neills (1) Oldham Athletic (1) Olympikus (1) Olympique Lyonnais (1) Page Viewer WebPart (1) Panama (2) Para (1) Paraguay (2) Penalty (1) Peru (6) Picture Manager (1) Poland (2) Ponte Preta (1) Portugal (2) Portuguesa RJ (1) problem (2) Puma (46) retro (1) review (111) Romai (2) Romania (1) RT Sports (1) Russia (4) Saeta (1) Sampaio Correa (1) Santarem (1) Santos (2) Sao Paulo FC (1) Sao Raimundo (1) scam (2) Score Draw (1) Search List with Count Displayed (1) Senegal (3) Serbia (1) Server Hardening (1) SESI Sao Paulo (1) Shandong Luneng (1) Shanghai Shenhua (1) Shanghai SIPG (1) SharePoint (61) SharePoint Connect to SQL (2) SharePoint Designer (3) Shenzhen FC (1) shirt (234) Sierra Leone (1) Singaporean Brand (2) Six5Six (1) Slovakia (2) Slovenia (1) Slow right click (1) Sondico (1) South Africa (1) Spain (3) SPS Services (2) Spurs (1) SQL Server 2008 (1) SSP User Profile behaviour (1) Super Bolla (2) Sweden (2) Switzerland (2) Taubate Funvic (1) Team GB (2) techfit (8) Tempo Sports (1) Thai Brand (3) Thailand (2) Togo (1) Topper (4) track top (13) Travels (1) Trinidad and Tobago (1) Tunisia (3) Turkiye (1) tyro (1) UAE (1) UB (3) UB Electric (3) Ucan (1) UE Llagostera (1) Uganda (1) Uhlsport (2) Ukraine (1) Umbro (18) Umbro Brazil (6) Under Armour (3) Upload Center (1) Uruguay (1) Vasco Da Gama (1) Venezuela (1) Vietnam (1) Villa Nova (1) Villarreal (1) Vitoria (1) volleyball (6) Vozao (1) Wales (1) Warrix (1) water (2) WebClient (4) WebDav (5) West Ham (2) Where to get buy Iceland football shirt in Reykjavik (1) Win 8 (2) Windows 10 (1) Windows Scheduled Task (1) wish list (1) Workflow (1) World Cup 14 (9) World Cup 18 (5) Wuhan Zall (1) Xinjiang Tianshan Leopard (1) Xtep (1) Yanbian Funde (1) Yemen (1) Zambia (1) Zhejiang Greentown (2) Zimbabwe (1)

Monday, 5 January 2015

An Issue with JQuery, AJAX Aysnc Calls

I had a bit of a struggle to get this working.  It was from a design perspective pretty easy but because I could not get a JQuery Ajax call to return a variable, after its call, therefore the design had to be adapted.  

Consider something like this.


    $.ajax({

            url: "/myserver/IS/mn/_vti_bin/lists.asmx",
            type: "POST",
            dataType: "xml",
            data: soapEnv,
            complete: processFiles,
            contentType: "text/xml; charset=\"utf-8\""
        });


OK, you can call the function processFiles after the the success completion of the call.  But because my design required calling this while in a loop of re-iterating through a result set, I really needed something more traditional that would have achieved something like this.


var myValue =  $.ajax({

            url: "/myserver/IS/mn/_vti_bin/lists.asmx",
            type: "POST",
            dataType: "xml",
            data: soapEnv,
            complete: processFiles,
            contentType: "text/xml; charset=\"utf-8\""
        });


Then process myValue 


OK, it seems like due to the Async nature of Ajax, it is not possible to do this.


So, in the end I side step the issue by separating the process into 2 Async processes.  I would output the required variables for the second process in the first loop rather than processing while the loop is running.


The outputted variables would form the call in JavaScript to the second process.


Below is the code that was on 


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Show Error Files</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<style>
ul
{
margin-left:1px;
margin-top:1px;
padding-left:12px;
padding-top:0px;
}

li.completed

{
list-style-image: url('green_small.png');
font-family:verdana,arial,helvetica,sans-serif;
font-size:8pt;
margin-left:0px;
}

li.error

{
list-style-image: url('red_small.png');
font-family:verdana,arial,helvetica,sans-serif;
font-size:8pt;
margin-left:0px;
}

li.noerrorfiles

{
list-style-image: url('green_small.png');
font-family:verdana,arial,helvetica,sans-serif;
font-size:8pt;
margin-left:12px;
}

body

{
margin-left:1px;
}

</style>


<script type="text/javascript" src="/myserver/IS/mn/Files%20To%20Share/jquery-1.10.2.js"></script>

<script type="text/javascript">
    // variable for how many files need to be read.  So that it can be shared across the functions.
    var giFileCount = 0;
    var gOutPutHTMLString = "";
    var gJobStatusFileURLPath = "";
var gMatchCode = "";

//getJobStatusFiles1("2014-12-19 04:22:01")
//alert("Here..");
//$(document).ready(function() {
getErrorFiles();
//})

// Get all Error Files for Today
function getErrorFiles()
{
var strDate = new Date();
var strToday = strDate.getFullYear() + "-" + (strDate.getMonth()+1) + "-" + pad(strDate.getDate());

$(document).ready(function() {
        var soapEnv =
            "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'> \
                <soapenv:Body> \
                     <GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'> \
                        <listName>IT team to follow up</listName> \
                        <query><Query><Where><Geq><FieldRef Name='Modified'/><Value Type='DateTime' IncludeTimeValue='FALSE'>"+strToday+"</Value></Geq> \
                        </Where><OrderBy><FieldRef Name='ID' Ascending='TRUE' /></OrderBy></Query></query> \
                        <viewFields> \
                            <ViewFields> \
                               <FieldRef Name='Name' /> \
                              <FieldRef Name='Modified' /> \
                           </ViewFields> \
                        </viewFields> \
                    </GetListItems> \
                </soapenv:Body> \
            </soapenv:Envelope>";

        $.ajax({

            url: "/myserver/IS/mn/_vti_bin/lists.asmx",
            type: "POST",
            dataType: "xml",
            data: soapEnv,
            complete: processFiles,
            contentType: "text/xml; charset=\"utf-8\""
        });
    });

}


function processFiles(xData, status)
{
var strForDropDown = "";   
   $(xData.responseXML).find("z\\:row, row").each(function() {
            strForDropDown = strForDropDown + $(this).attr("ows_ID") + "@" + $(this).attr("ows_FileRef") + "@" + $(this).attr("ows_Modified") + "@" +"\n";
        });
        // Now populate the department dropdown with our extracted data
        getFiles(strForDropDown);
}


function getFiles(strForDropDown)
{

if (strForDropDown != "")
{

var item_array = strForDropDown.split("\n");
giFileCount = item_array.length - 1;
for (var iCount = 0; iCount < (item_array.length-1); iCount++)
{
//alert(item_array[iCount].toString());
var items = item_array[iCount].split("@");

try
{

var strfileName = items[1].slice((items[1].indexOf('#')+1),items[1].len);
strfileName = "/" + strfileName;
var strfileModified =  items[2];

//alert(items[1]);

var arrItemsCodes = items[1].split("_");
var strCodes = arrItemsCodes[arrItemsCodes.length-1]
var arrMatchCode = strCodes.split(".");
var strCode = arrMatchCode[0]

//alert(strCode);

//alert(strfileModified);
readFile(strfileName, iCount, strfileModified, strCode);

}
catch(ex)
{
alert("Possible array out of bound error - getFiles(strForDropDown)");
}

}

}
else
{
showNoErrorMessage();
}

}

// function to read from a text file held in SharePoint instead of SharePoint list data
function readFile(sName, nCurrentCount, strModified, strCodeMatch)
{
var iCurrentCount = nCurrentCount;
var bCloseList = "";
var bStartList = "";

if (nCurrentCount == 0)

{
bStartList = true;
}
else
{
bStartList = false;
}

if (giFileCount == (nCurrentCount+1))
{
bCloseList = true;
}
else
{
bCloseList = false;
}

//alert(iCurrentCount + " " + bStartList + " " + bCloseList);
var request = jQuery.get(sName, function(data) {
    displayFile(data, bStartList, bCloseList, strModified, strCodeMatch);
    //process text file line by line
    //$('#div').html(data.replace('n','<br />'));
    //$('#StatusMessagesTest').html(data.replace('\n','<br />'));
});

request.error(function(jqXHR, textStatus, errorThrown) {
  //showNoErrorMessage();
});
}

function pad(d) 
{
        return (d < 10) ? '0' + d.toString() : d.toString();
}

function showNoErrorMessage()

{
var strOutput;
strOutput = "<ul class='statusMessage'>";

strOutput = strOutput + "<li class='noerrorfiles'>";

        strOutput = strOutput + "No Errors - All Completed";
        strOutput = strOutput + "</li>";
        
        strOutput = strOutput + "</ul>";
document.getElementById("StatusMessages").innerHTML = strOutput;

}


function setModifiedTo(sMod)

{
var sReturnValue = "";
var item_array = sMod.split(":");

sReturnValue = item_array[0] + ":" + pad((parseInt(item_array[1], 10) + 1).toString()) + ":00Z";  


return sReturnValue;

}

// Get all Error Files for Today

function getJobStatusFiles(strModified, strMatchCode)
{
//alert(strModified);

strModified = strModified.replace(" ", "T");
strModified = strModified + "Z";
//alert(strModified);
//strModified = "2014-12-18T04:22:22Z";
var strModifiedTo = setModifiedTo(strModified);
//alert(strModifiedTo);
$(document).ready(function() {
        gMatchCode = strMatchCode;  // Copy the MatchCode variable into a global first because of Async call we need it later to do a match if more than 1 JobStatus file is returned for the given modified time.
        var soapEnv =
            "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'> \
                <soapenv:Body> \
                     <GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'> \
                        <listName>New Job Status</listName> \
                        <query><Query><Where><And><Geq><FieldRef Name='Modified'/><Value Type='DateTime' IncludeTimeValue='TRUE'>"+strModified+"</Value></Geq> \
                        <Leq><FieldRef Name='Modified'/><Value Type='DateTime' IncludeTimeValue='TRUE'>"+strModifiedTo+"</Value></Leq> \
                        </And> \
                        </Where><OrderBy><FieldRef Name='ID' Ascending='TRUE' /></OrderBy></Query></query> \
                          <viewFields> \
                            <ViewFields> \
                               <FieldRef Name='Name' /> \
                              <FieldRef Name='Modified' /> \
                           </ViewFields> \
                        </viewFields> \
                    </GetListItems> \
                </soapenv:Body> \
            </soapenv:Envelope>";

        $.ajax({
            url: "/myserver/IS/_vti_bin/lists.asmx",
            type: "POST",
            dataType: "xml",
            data: soapEnv,
            complete: processJobStatusFiles,
            contentType: "text/xml; charset=\"utf-8\""
        });
    });

}

function processJobStatusFiles(xData, status)
{
var strForDropDown = "";   
   $(xData.responseXML).find("z\\:row, row").each(function() {
            strForDropDown = strForDropDown + $(this).attr("ows_ID") + "@" + $(this).attr("ows_FileRef") + "@" + $(this).attr("ows_Modified") + "@" +"\n";
        });
        
        //alert(strForDropDown);
        // Now extract the file's URL links
        getJobStatusFileLinks(strForDropDown);

}


function getJobStatusFileLinks(strForDropDown)

{
var strfileNameLink = "";
//alert(gMatchCode);
if (strForDropDown != "")
{

var item_array = strForDropDown.split("\n");
//alert(item_array.length);
//alert(item_array.length);

if ((item_array.length-1) > 1)
{

for (var iCount = 0; iCount < (item_array.length-1); iCount++)
{
//alert(item_array[iCount].toString());
var items = item_array[iCount].split("@");

try
{

strfileNameLink = items[1].slice((items[1].indexOf('#')+1),items[1].len);
strfileNameLink = "/" + strfileNameLink ;
//alert("More than 1 file need to decide which is correct based on the match code for " + strfileNameLink);
var strMatchCode = gMatchCode;

if (FindMatchingFile(strMatchCode, strfileNameLink) == true)
{
return;  // Can exit as file already found and opened.
}
else
{
// If we are in the last item and still no match then open the standard log view of Job Status.
if (iCount == (item_array.length-2))
{
openFile("File cannot be found - opening today's Job Status view.");
}
}

}
catch(ex)
{
alert("Possible array out of bound error - getJobStatusFileLinks(strForDropDown)");
}

}
}
else
{
var SingleItem = item_array[0].split("@");
strfileNameLink = SingleItem[1].slice((SingleItem[1].indexOf('#')+1),SingleItem[1].len);
strfileNameLink = "/" + strfileNameLink ;
//alert("Single File " + strfileNameLink);
openFile(strfileNameLink);
}
}
else
{
// alert("No Link to File.");
openFile("File cannot be found - opening today's Job Status view.");
}

}


function FindMatchingFile(strMatchCode, strFileName)
{
var arrItemsCodes = strFileName.split("_");
var strCodes = arrItemsCodes[arrItemsCodes.length-1]
var arrMatchCode = strCodes.split(".");
var strCode = arrMatchCode[0]

if (strMatchCode == strCode)
{
openFile(strFileName);
return true;
}
else
{
return false;
}

}

function openFile(strFileNameToOpen)

{
if (UrlExists(strFileNameToOpen) == true)
{
var newwindow = window.open(strFileNameToOpen, 'window2', 'toolbar=yes,resizable=yes,directories=no,status=no,menubar=no');
}
else
{
alert(strFileNameToOpen);
var newwindow = window.open('/myserver/IS/Job%20Status/Forms/LogView.aspx?RootFolder=%2fmyserver%2fIS%2fJob%20Status%2fAudit%20Report%20%28Interfaces%29&FolderCTID=&View=%7b89D199F3%2d0B74%2d4EDC%2d8F69%2d1C1918B7F42B%7d', '_blank');
}

}


// function that can check whether URL returns not found 404.
function UrlExists(url) 
{     
// Uncomment to view full path of report that program is trying to retrieve
//alert(url);
//document.all.Report_Name_Retrieved.innerHTML = "Report Name : " + url;

if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  var http = new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  var http = new ActiveXObject("Microsoft.XMLHTTP");
  }

var http = new XMLHttpRequest();     

http.open('HEAD', url, false);     
http.send();     
return http.status!=404; 


function displayFile(strData, bWriteStart, bWriteEnd, sModified, sCodeMatch)

{
//alert(strData);
var statusMessagesArray = strData.split('\n');
var strOutput = "";
var sReturn = "";

// Check if it is beginning of items to show.
if (bWriteStart == true)
{
strOutput = "<ul class='statusMessage'>";
gOutPutHTMLString = strOutput;
        }
        
        // Build the HTML output for the items
        if (statusMessagesArray.length > 1)
{
        for (var i = 0; i < (statusMessagesArray.length-1); i++) 
        {
          //if ($("statusMessagesArray[i]:contains('Completed')"))
          if (statusMessagesArray[i].toLowerCase().indexOf('completed') > 0)
          {
          strOutput = strOutput + "<li class='completed'><a href='/myserver/IS/Job%20Status/Forms/LogView.aspx?RootFolder=%2fmyserver%2fIS%2fJob%20Status%2fAudit%20Report%20%28Interfaces%29&FolderCTID=&View=%7b89D199F3%2d0B74%2d4EDC%2d8F69%2d1C1918B7F42B%7d' '_blank'>";
          strOutput = strOutput + statusMessagesArray[i];
          strOutput = strOutput + "</a></li>";
          }
          else
          {
          //alert(sModified);
          //getJobStatusFiles(sModified);
         
          //alert("1 " + gJobStatusFileURLPath);
         
          //alert(this.gJobStatusFileURLPath);
          //strOutput = strOutput + "<li class='error'><a href='/myserver/IS/Job%20Status/Forms/LogView.aspx?RootFolder=%2fmyserver%2fIS%2fJob%20Status%2fAudit%20Report%20%28Interfaces%29&FolderCTID=&View=%7b89D199F3%2d0B74%2d4EDC%2d8F69%2d1C1918B7F42B%7d' target='_blank'>";
         
          strOutput = strOutput + "<li class='error'><a href='JavaScript:getJobStatusFiles(&#39;" + sModified  + "&#39;,&#39;" + sCodeMatch +"&#39;);'>";
          strOutput = strOutput + statusMessagesArray[i];
          strOutput = strOutput + "</a></li>";
         
          }
        }
        }
        else
        {
       
        if (statusMessagesArray.length == 1)
{
        if (statusMessagesArray[0].toLowerCase().indexOf('completed') > 0)
          {
          strOutput = strOutput + "<li class='completed'><a href='/myserver/IS/Job%20Status/Forms/LogView.aspx?RootFolder=%2fmyserver%2fIS%2fJob%20Status%2fAudit%20Report%20%28Interfaces%29&FolderCTID=&View=%7b89D199F3%2d0B74%2d4EDC%2d8F69%2d1C1918B7F42B%7d' '_blank'>";
          strOutput = strOutput + statusMessagesArray[0];
          strOutput = strOutput + "</a></li>";
          }
          else
          {
          //alert(sModified);gJobStatusFileURLPath 
          //getJobStatusFiles(sModified);
         
          //alert("2" + gJobStatusFileURLPath.responseXML);
//strOutput = strOutput + "<li class='error'><a href='/myserver/IS/Job%20Status/Forms/LogView.aspx?RootFolder=%2fmyserver%2fIS%2fJob%20Status%2fAudit%20Report%20%28Interfaces%29&FolderCTID=&View=%7b89D199F3%2d0B74%2d4EDC%2d8F69%2d1C1918B7F42B%7d' target='_blank'>";
          //alert(this.gJobStatusFileURLPath);
          strOutput = strOutput + "<li class='error'><a href='JavaScript:getJobStatusFiles(&#39;" + sModified + "&#39;,&#39;" + sCodeMatch + "&#39;);'>";
          strOutput = strOutput + statusMessagesArray[0];
          strOutput = strOutput + "</a></li>";
         
          }
          }
        }
        
//alert(giFileCount + " " + nCurrentCount);
// Check if need to end the UL
if (bWriteEnd == true)
{
//alert(strOutput)
strOutput = strOutput + "</ul>";
//document.getElementById("StatusMessages").innerHTML = document.getElementById("StatusMessages").innerHTML + strOutput;
gOutPutHTMLString = gOutPutHTMLString + strOutput;
}
else
{
//alert(strOutput)
//document.getElementById("StatusMessages").innerHTML = document.getElementById("StatusMessages").innerHTML + strOutput;
gOutPutHTMLString = gOutPutHTMLString + strOutput;
}

// write the HTML into the DIV
document.getElementById("StatusMessages").innerHTML = gOutPutHTMLString;

}


</script>

</head>

<BODY>
<div id="StatusMessages" style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px; margin-left:0px">
</div> 
<script type="text/javascript">
</script>

</BODY></html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Show Error Files</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<style>
ul
{
margin-left:1px;
margin-top:1px;
padding-left:12px;
padding-top:0px;
}

li.completed
{
list-style-image: url('green_small.png');
font-family:verdana,arial,helvetica,sans-serif;
font-size:8pt;
margin-left:0px;
}

li.error
{
list-style-image: url('red_small.png');
font-family:verdana,arial,helvetica,sans-serif;
font-size:8pt;
margin-left:0px;
}

li.noerrorfiles
{
list-style-image: url('green_small.png');
font-family:verdana,arial,helvetica,sans-serif;
font-size:8pt;
margin-left:12px;
}

body
{
margin-left:1px;
}

</style>

<script type="text/javascript" src="/myserver/IS/mn/Files%20To%20Share/jquery-1.10.2.js"></script>
<script type="text/javascript">
    // variable for how many files need to be read.  So that it can be shared across the functions.
    var giFileCount = 0;
    var gOutPutHTMLString = "";
    var gJobStatusFileURLPath = "";
var gMatchCode = "";
//getJobStatusFiles1("2014-12-19 04:22:01")
//alert("Here..");
//$(document).ready(function() {
getErrorFiles();
//})
// Get all Error Files for Today
function getErrorFiles()
{
var strDate = new Date();
var strToday = strDate.getFullYear() + "-" + (strDate.getMonth()+1) + "-" + pad(strDate.getDate());
$(document).ready(function() {
        var soapEnv =
            "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'> \
                <soapenv:Body> \
                     <GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'> \
                        <listName>IT team to follow up</listName> \
                        <query><Query><Where><Geq><FieldRef Name='Modified'/><Value Type='DateTime' IncludeTimeValue='FALSE'>"+strToday+"</Value></Geq> \
                        </Where><OrderBy><FieldRef Name='ID' Ascending='TRUE' /></OrderBy></Query></query> \
                        <viewFields> \
                            <ViewFields> \
                               <FieldRef Name='Name' /> \
                              <FieldRef Name='Modified' /> \
                           </ViewFields> \
                        </viewFields> \
                    </GetListItems> \
                </soapenv:Body> \
            </soapenv:Envelope>";

        $.ajax({
            url: "/myserver/IS/mn/_vti_bin/lists.asmx",
            type: "POST",
            dataType: "xml",
            data: soapEnv,
            complete: processFiles,
            contentType: "text/xml; charset=\"utf-8\""
        });
    });

}
function processFiles(xData, status)
{
var strForDropDown = "";   
   $(xData.responseXML).find("z\\:row, row").each(function() {
            strForDropDown = strForDropDown + $(this).attr("ows_ID") + "@" + $(this).attr("ows_FileRef") + "@" + $(this).attr("ows_Modified") + "@" +"\n";
        });
        // Now populate the department dropdown with our extracted data
        getFiles(strForDropDown);
}

function getFiles(strForDropDown)
{
if (strForDropDown != "")
{
var item_array = strForDropDown.split("\n");
giFileCount = item_array.length - 1;
for (var iCount = 0; iCount < (item_array.length-1); iCount++)
{
//alert(item_array[iCount].toString());
var items = item_array[iCount].split("@");
try
{
var strfileName = items[1].slice((items[1].indexOf('#')+1),items[1].len);
strfileName = "/" + strfileName;
var strfileModified =  items[2];
//alert(items[1]);
var arrItemsCodes = items[1].split("_");
var strCodes = arrItemsCodes[arrItemsCodes.length-1]
var arrMatchCode = strCodes.split(".");
var strCode = arrMatchCode[0]
//alert(strCode);
//alert(strfileModified);
readFile(strfileName, iCount, strfileModified, strCode);
}
catch(ex)
{
alert("Possible array out of bound error - getFiles(strForDropDown)");
}
}
}
else
{
showNoErrorMessage();
}
}
// function to read from a text file held in SharePoint instead of SharePoint list data
function readFile(sName, nCurrentCount, strModified, strCodeMatch)
{
var iCurrentCount = nCurrentCount;
var bCloseList = "";
var bStartList = "";

if (nCurrentCount == 0)
{
bStartList = true;
}
else
{
bStartList = false;
}
if (giFileCount == (nCurrentCount+1))
{
bCloseList = true;
}
else
{
bCloseList = false;
}
//alert(iCurrentCount + " " + bStartList + " " + bCloseList);
var request = jQuery.get(sName, function(data) {
    displayFile(data, bStartList, bCloseList, strModified, strCodeMatch);
    //process text file line by line
    //$('#div').html(data.replace('n','<br />'));
    //$('#StatusMessagesTest').html(data.replace('\n','<br />'));
});
request.error(function(jqXHR, textStatus, errorThrown) {
  //showNoErrorMessage();
});
}
function pad(d) 
{
        return (d < 10) ? '0' + d.toString() : d.toString();
}

function showNoErrorMessage()
{
var strOutput;
strOutput = "<ul class='statusMessage'>";

strOutput = strOutput + "<li class='noerrorfiles'>";
        strOutput = strOutput + "No Errors - All Completed";
        strOutput = strOutput + "</li>";
        
        strOutput = strOutput + "</ul>";
document.getElementById("StatusMessages").innerHTML = strOutput;

}

function setModifiedTo(sMod)
{
var sReturnValue = "";
var item_array = sMod.split(":");

sReturnValue = item_array[0] + ":" + pad((parseInt(item_array[1], 10) + 1).toString()) + ":00Z";  

return sReturnValue;
}

// Get all Error Files for Today
function getJobStatusFiles(strModified, strMatchCode)
{
//alert(strModified);
strModified = strModified.replace(" ", "T");
strModified = strModified + "Z";
//alert(strModified);
//strModified = "2014-12-18T04:22:22Z";
var strModifiedTo = setModifiedTo(strModified);
//alert(strModifiedTo);
$(document).ready(function() {
        gMatchCode = strMatchCode;  // Copy the MatchCode variable into a global first because of Async call we need it later to do a match if more than 1 JobStatus file is returned for the given modified time.
        var soapEnv =
            "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'> \
                <soapenv:Body> \
                     <GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'> \
                        <listName>New Job Status</listName> \
                        <query><Query><Where><And><Geq><FieldRef Name='Modified'/><Value Type='DateTime' IncludeTimeValue='TRUE'>"+strModified+"</Value></Geq> \
                        <Leq><FieldRef Name='Modified'/><Value Type='DateTime' IncludeTimeValue='TRUE'>"+strModifiedTo+"</Value></Leq> \
                        </And> \
                        </Where><OrderBy><FieldRef Name='ID' Ascending='TRUE' /></OrderBy></Query></query> \
                          <viewFields> \
                            <ViewFields> \
                               <FieldRef Name='Name' /> \
                              <FieldRef Name='Modified' /> \
                           </ViewFields> \
                        </viewFields> \
                    </GetListItems> \
                </soapenv:Body> \
            </soapenv:Envelope>";
        $.ajax({
            url: "/myserver/IS/_vti_bin/lists.asmx",
            type: "POST",
            dataType: "xml",
            data: soapEnv,
            complete: processJobStatusFiles,
            contentType: "text/xml; charset=\"utf-8\""
        });
    });
}
function processJobStatusFiles(xData, status)
{
var strForDropDown = "";   
   $(xData.responseXML).find("z\\:row, row").each(function() {
            strForDropDown = strForDropDown + $(this).attr("ows_ID") + "@" + $(this).attr("ows_FileRef") + "@" + $(this).attr("ows_Modified") + "@" +"\n";
        });
        
        //alert(strForDropDown);
        // Now extract the file's URL links
        getJobStatusFileLinks(strForDropDown);

}

function getJobStatusFileLinks(strForDropDown)
{
var strfileNameLink = "";
//alert(gMatchCode);
if (strForDropDown != "")
{
var item_array = strForDropDown.split("\n");
//alert(item_array.length);
//alert(item_array.length);
if ((item_array.length-1) > 1)
{
for (var iCount = 0; iCount < (item_array.length-1); iCount++)
{
//alert(item_array[iCount].toString());
var items = item_array[iCount].split("@");
try
{
strfileNameLink = items[1].slice((items[1].indexOf('#')+1),items[1].len);
strfileNameLink = "/" + strfileNameLink ;
//alert("More than 1 file need to decide which is correct based on the match code for " + strfileNameLink);
var strMatchCode = gMatchCode;
if (FindMatchingFile(strMatchCode, strfileNameLink) == true)
{
return;  // Can exit as file already found and opened.
}
else
{
// If we are in the last item and still no match then open the standard log view of Job Status.
if (iCount == (item_array.length-2))
{
openFile("File cannot be found - opening today's Job Status view.");
}
}
}
catch(ex)
{
alert("Possible array out of bound error - getJobStatusFileLinks(strForDropDown)");
}
}
}
else
{
var SingleItem = item_array[0].split("@");
strfileNameLink = SingleItem[1].slice((SingleItem[1].indexOf('#')+1),SingleItem[1].len);
strfileNameLink = "/" + strfileNameLink ;
//alert("Single File " + strfileNameLink);
openFile(strfileNameLink);
}
}
else
{
// alert("No Link to File.");
openFile("File cannot be found - opening today's Job Status view.");
}

}
function FindMatchingFile(strMatchCode, strFileName)
{
var arrItemsCodes = strFileName.split("_");
var strCodes = arrItemsCodes[arrItemsCodes.length-1]
var arrMatchCode = strCodes.split(".");
var strCode = arrMatchCode[0]
if (strMatchCode == strCode)
{
openFile(strFileName);
return true;
}
else
{
return false;
}
}

function openFile(strFileNameToOpen)
{
if (UrlExists(strFileNameToOpen) == true)
{
var newwindow = window.open(strFileNameToOpen, 'window2', 'toolbar=yes,resizable=yes,directories=no,status=no,menubar=no');
}
else
{
alert(strFileNameToOpen);
var newwindow = window.open('/myserver/IS/Job%20Status/Forms/LogView.aspx?RootFolder=%2fmyserver%2fIS%2fJob%20Status%2fAudit%20Report%20%28Interfaces%29&FolderCTID=&View=%7b89D199F3%2d0B74%2d4EDC%2d8F69%2d1C1918B7F42B%7d', '_blank');
}

}
// function that can check whether URL returns not found 404.
function UrlExists(url) 
{     
// Uncomment to view full path of report that program is trying to retrieve
//alert(url);
//document.all.Report_Name_Retrieved.innerHTML = "Report Name : " + url;
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  var http = new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  var http = new ActiveXObject("Microsoft.XMLHTTP");
  }

var http = new XMLHttpRequest();     
http.open('HEAD', url, false);     
http.send();     
return http.status!=404; 

function displayFile(strData, bWriteStart, bWriteEnd, sModified, sCodeMatch)
{
//alert(strData);
var statusMessagesArray = strData.split('\n');
var strOutput = "";
var sReturn = "";
// Check if it is beginning of items to show.
if (bWriteStart == true)
{
strOutput = "<ul class='statusMessage'>";
gOutPutHTMLString = strOutput;
        }
        
        // Build the HTML output for the items
        if (statusMessagesArray.length > 1)
{
        for (var i = 0; i < (statusMessagesArray.length-1); i++) 
        {
          //if ($("statusMessagesArray[i]:contains('Completed')"))
          if (statusMessagesArray[i].toLowerCase().indexOf('completed') > 0)
          {
          strOutput = strOutput + "<li class='completed'><a href='/myserver/IS/Job%20Status/Forms/LogView.aspx?RootFolder=%2fmyserver%2fIS%2fJob%20Status%2fAudit%20Report%20%28Interfaces%29&FolderCTID=&View=%7b89D199F3%2d0B74%2d4EDC%2d8F69%2d1C1918B7F42B%7d' '_blank'>";
          strOutput = strOutput + statusMessagesArray[i];
          strOutput = strOutput + "</a></li>";
          }
          else
          {
          //alert(sModified);
          //getJobStatusFiles(sModified);
         
          //alert("1 " + gJobStatusFileURLPath);
         
          //alert(this.gJobStatusFileURLPath);
          //strOutput = strOutput + "<li class='error'><a href='/myserver/IS/Job%20Status/Forms/LogView.aspx?RootFolder=%2fmyserver%2fIS%2fJob%20Status%2fAudit%20Report%20%28Interfaces%29&FolderCTID=&View=%7b89D199F3%2d0B74%2d4EDC%2d8F69%2d1C1918B7F42B%7d' target='_blank'>";
         
          strOutput = strOutput + "<li class='error'><a href='JavaScript:getJobStatusFiles(&#39;" + sModified  + "&#39;,&#39;" + sCodeMatch +"&#39;);'>";
          strOutput = strOutput + statusMessagesArray[i];
          strOutput = strOutput + "</a></li>";
         
          }
        }
        }
        else
        {
       
        if (statusMessagesArray.length == 1)
{
        if (statusMessagesArray[0].toLowerCase().indexOf('completed') > 0)
          {
          strOutput = strOutput + "<li class='completed'><a href='/myserver/IS/Job%20Status/Forms/LogView.aspx?RootFolder=%2fmyserver%2fIS%2fJob%20Status%2fAudit%20Report%20%28Interfaces%29&FolderCTID=&View=%7b89D199F3%2d0B74%2d4EDC%2d8F69%2d1C1918B7F42B%7d' '_blank'>";
          strOutput = strOutput + statusMessagesArray[0];
          strOutput = strOutput + "</a></li>";
          }
          else
          {
          //alert(sModified);gJobStatusFileURLPath 
          //getJobStatusFiles(sModified);
         
          //alert("2" + gJobStatusFileURLPath.responseXML);
//strOutput = strOutput + "<li class='error'><a href='/myserver/IS/Job%20Status/Forms/LogView.aspx?RootFolder=%2fmyserver%2fIS%2fJob%20Status%2fAudit%20Report%20%28Interfaces%29&FolderCTID=&View=%7b89D199F3%2d0B74%2d4EDC%2d8F69%2d1C1918B7F42B%7d' target='_blank'>";
          //alert(this.gJobStatusFileURLPath);
          strOutput = strOutput + "<li class='error'><a href='JavaScript:getJobStatusFiles(&#39;" + sModified + "&#39;,&#39;" + sCodeMatch + "&#39;);'>";
          strOutput = strOutput + statusMessagesArray[0];
          strOutput = strOutput + "</a></li>";
         
          }
          }
        }
        
//alert(giFileCount + " " + nCurrentCount);
// Check if need to end the UL
if (bWriteEnd == true)
{
//alert(strOutput)
strOutput = strOutput + "</ul>";
//document.getElementById("StatusMessages").innerHTML = document.getElementById("StatusMessages").innerHTML + strOutput;
gOutPutHTMLString = gOutPutHTMLString + strOutput;
}
else
{
//alert(strOutput)
//document.getElementById("StatusMessages").innerHTML = document.getElementById("StatusMessages").innerHTML + strOutput;
gOutPutHTMLString = gOutPutHTMLString + strOutput;
}
// write the HTML into the DIV
document.getElementById("StatusMessages").innerHTML = gOutPutHTMLString;
}
</script>

</head>
<BODY>
<div id="StatusMessages" style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px; margin-left:0px">
</div> 
<script type="text/javascript">
</script>
</BODY></html>




Monday, 29 December 2014

UB Extractor Rubbish

An update on this piece of junk that I was fleeced into trying.  I regret very much.

UB Extractor Problem

It has now screwed up completely and thats less than a year of rather light usage.  Not exactly industrial usage capacity is it.  ;-)

Guess what as expected the cowboy company won't cover its maintenance even though it is , well what do you expect from cowboys.  And their sad interpretation of why the machine has completely broken down is.

Well you got to laugh, they say the electric board on the panel is broken and it is BECAUSE I cleaned the panel with water so I have to pay for all the parts to replace the electric board. What a joke, imagine if someone came to tell you, we won't fix your washing machine for free while its under warranty period because you cleaned the front panel with a wet cloth.  Amazing how cowboy companies talk and bully us with their tactics.

Well, having learnt my lesson, we decided to just throw this thing away and get a good old traditional Siemens extractor with very standard spec with Siemens' own maintenance and it costs less that the above piece of junk.

Don't believe any salesman offering you this piece of rubbish.  Avoid, stay away even if its built and demo looks impressive.  Don't fall sucker for it.  It is an expensive turd.

Wednesday, 10 December 2014

Just what I need to get some JQuery SharePoint list to work in Chrome

I recently came across the same problem where some JQuery Code that I had absorbed from Jan Tielens's example just won't work on a Chrome browser.

Then I came across this http://maxmorrow.wordpress.com/2012/06/17/jquery-caml-query-lists-asmx-web-service/

And it was exactly what I was looking for.

$(xData.responseXML).find(“z\\:row”).each(function() {

to this:


$(xData.responseXML).find(“z\\:row, row”).each(function() {


Tuesday, 9 December 2014

Dangers to AD account's username ID being renamed

This has struck us finally, where some users who have had account IDs changed in the AD starts experiencing problems accessing the site.

For example, I was once mydomain\kong kong  now I have had my ID changed to mydomain\kong lo

You might find the problems of logging into SharePoint site becomes intermittent or seems to work but then suddenly stops working.

You will also find that it is possible that adding the old account ID's access can still work. Although sometimes, SharePoint will prevent you doing it by warning the account is not unique.

It is best for situation like this to do an STSADM -o migrateuser command for these users in order to get rid of the the anomaly with the old account ID lying around in SharePoint's site collection user table.

See post below.

http://littletalk.wordpress.com/2009/12/14/the-user-does-not-exist-or-is-not-unique/

However, the thing to be most careful about is if this has happened to a Service Account that is being used to systematically access SharePoint libraries from say a batch program on a Server.

Granting the access to the old now renamed account ID can have fatal consequences for the WebClient Service that runs.  It can crash it and the only way to recover it is to reboot the server or kill it via the task manager after knowing its process ID.

http://support.microsoft.com/kb/2548470

The crash can happen not immediately after granting the access to the old account ID, it can look like all is fine and even files can get written into SharePoint, until all of a sudden may be a Windows Server Audit process runs, it probably flags up the access violation and crashed the WebClient service causing the problem.