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

Quick and Dirty Up a Level navigation link for OOTB document library webpart

You know with SharePoint OOTB library webpart that you always put onto say a homepage of a site.

for example

When you click on it, there is never a way to navigate back up a level like you have with Windows Explorer and often users really get confused by it.  And the breadcrumb above won't show anything to allow the user to navigate back up unless they break into the Shared library's AllItems.aspx page.  Often you just get a message on the webpart like below.


Well, there are various fancy solutions for this.  However, here is a quick and dirty way that alleviate the pain.  Although it is not perfect.

Simply add some script like below into a CEWP.  It will simple write a back button in JavaScript when one of the folders for the designated webpart that you want the back button to appear for to appear.

<script type="text/javascript">

var url = window.location.href;

if (url.toLowerCase().indexOf('&folderctid') > 0 && url.toLowerCase().indexOf('myshared') > 0 && url.toLowerCase().indexOf('documents') > 0) 
{
document.write("<a href='JavaScript:history.back();' class='ms-sitemapdirectional'><-- Up a Level</a>")
}

</script>

The code above would show a back button when ever a folder in the webpart that is for the library with name containing "myshared documents" has been clicked on as it is revealed by the query string.

Resulting in a button like the following above the designated webpart.  Users can click on it and it has a desirable effect of appearing to allow user to navigate back up a level in the library that they are exploring.



Reading text files over http pretty straight forward it seems

Discovered that its pretty simple to read say text files over http with Jquery.

function readFile()
{
var strToday = new Date();
var strFileName = strToday.getFullYear() + "" + pad((strToday.getMonth()+1)) + "" + pad(strToday.getDate());
//alert(strFileName);
jQuery.get('/myserver/IS/mn/ErrorLogs/DailyLog_'+strFileName+'.log', function(data) {
    displayFile(data);
    //process text file line by line

});
}

Above we simply get the .log file from the location in SharePoint and then use the function displayFile to process the contents of the file that has been returned.

Below is the full code for the page.

<!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>IS Monitoring Status Messages</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<style>
ul
{
margin-left:15px;
}

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

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

</style>

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

readFile();

// function to read from a text file held in SharePoint instead of SharePoint list data
function readFile()
{
var strToday = new Date();
var strFileName = strToday.getFullYear() + "" + pad((strToday.getMonth()+1)) + "" + pad(strToday.getDate());
//alert(strFileName);
jQuery.get('/myserver/IS/mn/ErrorLogs/DailyLog_'+strFileName+'.log', function(data) {
    displayFile(data);
    //process text file line by line
    //$('#div').html(data.replace('n','<br />'));
    //$('#StatusMessagesTest').html(data.replace('\n','<br />'));

});
}

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

function displayFile(strData)
{
//alert(strData);
var statusMessagesArray = strData.split('\n');
var strOutput;
strOutput = "<ul class='statusMessage'>";
        
        statusMessagesArray = statusMessagesArray.reverse();

        if (statusMessagesArray.length > 1)
{
        for (var i = 1; i < (statusMessagesArray.length); i++) 
        {
          //if ($("statusMessagesArray[i]:contains('Completed')"))
          if (statusMessagesArray[i].toLowerCase().indexOf('completed') > 0)
          {
          strOutput = strOutput + "<li class='completed'>";
          strOutput = strOutput + statusMessagesArray[i];
          strOutput = strOutput + "</li>";
          }
          else
          {
          strOutput = strOutput + "<li class='error'>";
          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'>";
          strOutput = strOutput + statusMessagesArray[0];
          strOutput = strOutput + "</li>";
          }
          else
          {
          strOutput = strOutput + "<li class='error'>";
          strOutput = strOutput + statusMessagesArray[0];
          strOutput = strOutput + "</a></li>";
          }
          }
}

strOutput = strOutput + "</ul>";
document.getElementById("StatusMessages").innerHTML = strOutput;
}
// End of area to read from a text file held in SharePoint instead of SharePoint list data


</script>

</head>
<BODY>
<div id="StatusMessages" style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px">
</div> 
</BODY></html>

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>