SharePoint. Change document icon in document library? - sharepoint

I would like to change document icon in document library at runtime. Icon should be changed based on some condition I have in code. There is no difference what extension of file is (txt, doc, pdf, etc..). Currently I use HTTP module to parse server response and change icon in runtime. However this solution is not reliable as page HTML markup may be changed, different views has different behavior and there are issues with registration HTTP module in SharePoint 2010.
Is there any API or any other reliable way to change document's icon at runtime?
I would appreciate any help.
Thanks beforehand,
-Petro

Here is the schema of Sharepoint 2010 standard DocIcon Field (its quite huge):
<Field ID="{081c6e4c-5c14-4f20-b23e-1a71ceb6a67c}" Type="Computed" ReadOnly="TRUE" Name="DocIcon" DisplayName="Тип" TextOnly="TRUE" ClassInfo="Icon" AuthoringInfo="(значок связи с документом)" SourceID="http://schemas.microsoft.com/sharepoint/v3" StaticName="DocIcon" FromBaseType="TRUE">
<FieldRefs>
<FieldRef Name="File_x0020_Type" />
<FieldRef Name="FSObjType" />
<FieldRef Name="FileRef" />
<FieldRef Name="FileLeafRef" />
<FieldRef Name="HTML_x0020_File_x0020_Type" />
<FieldRef Name="PermMask" />
<FieldRef Name="CheckoutUser" ShowField="Title" />
<FieldRef Name="IsCheckedoutToLocal" />
<FieldRef Name="ServerUrl" />
<FieldRef Name="IconOverlay" />
</FieldRefs>
<DisplayPattern>
<SetVar Name="DocIconImg">
<SetVar Name="DocIconAltText">
<IfEqual>
<Expr1>
<LookupColumn Name="FSObjType" />
</Expr1>
<Expr2>1</Expr2>
<Then>
<IfSubString>
<Expr1>0x0120D5</Expr1>
<Expr2>
<Column Name="ContentTypeId" />
</Expr2>
<Then>
<HTML>Коллекция документов: </HTML>
<LookupColumn Name="FileLeafRef" HTMLEncode="TRUE" />
</Then>
<Else>
<HTML>Папка: </HTML>
<LookupColumn Name="FileLeafRef" HTMLEncode="TRUE" />
</Else>
</IfSubString>
</Then>
<Else>
<LookupColumn Name="FileLeafRef" HTMLEncode="TRUE" />
</Else>
</IfEqual>
</SetVar>
<SetVar Name="DocIconFileName">
<IfEqual>
<Expr1>
<Column Name="IconOverlay" />
</Expr1>
<Expr2 />
<Then>
<IfEqual>
<Expr1>
<LookupColumn Name="FSObjType" />
</Expr1>
<Expr2>1</Expr2>
<Then>
<IfEqual>
<Expr1>
<Column Name="HTML_x0020_File_x0020_Type" />
<HTML>|</HTML>
<Column Name="File_x0020_Type" />
</Expr1>
<Expr2>
<HTML>|</HTML>
</Expr2>
<Then>
<HTML>folder.gif</HTML>
</Then>
<Else>
<SetVar Name="FolderIconFromMap">
<MapToIcon>
<Column Name="HTML_x0020_File_x0020_Type" />
<HTML>|</HTML>
<Column Name="File_x0020_Type" />
</MapToIcon>
</SetVar>
<IfEqual>
<Expr1>
<GetVar Name="FolderIconFromMap" />
</Expr1>
<Expr2>
<MapToIcon />
</Expr2>
<Then>
<HTML>folder.gif</HTML>
</Then>
<Else>
<GetVar Name="FolderIconFromMap" />
</Else>
</IfEqual>
</Else>
</IfEqual>
</Then>
<Else>
<MapToIcon>
<Column Name="HTML_x0020_File_x0020_Type" />
<HTML>|</HTML>
<Column Name="File_x0020_Type" />
</MapToIcon>
</Else>
</IfEqual>
</Then>
<Else>
<MapToIcon>
<Column Name="IconOverlay" />
</MapToIcon>
</Else>
</IfEqual>
</SetVar>
<HTML><![CDATA[<img border="0" alt="]]></HTML>
<GetVar Name="DocIconAltText" />
<HTML><![CDATA[" title="]]></HTML>
<GetVar Name="DocIconAltText" />
<HTML><![CDATA[" src="/_layouts/images/]]></HTML>
<GetVar Name="DocIconFileName" />
<HTML><![CDATA[" />]]></HTML>
</SetVar>
<SetVar Name="DocIconOverlayImg">
<IfEqual>
<Expr1>
<Column Name="IconOverlay" />
</Expr1>
<Expr2 />
<Then>
<IfEqual>
<Expr1>
<Column Name="CheckoutUser" />
</Expr1>
<Expr2 />
<Else>
<SetVar Name="DocIconOverlayAltText">
<LookupColumn Name="FileLeafRef" HTMLEncode="TRUE" />
<HTML><![CDATA[
Кем извлечено: ]]></HTML>
<LookupColumn Name="CheckoutUser" ShowField="Title" HTMLEncode="TRUE" />
</SetVar>
<HTML><![CDATA[<img class="ms-vb-icon-overlay" alt="]]></HTML>
<GetVar Name="DocIconOverlayAltText" />
<HTML><![CDATA[" title="]]></HTML>
<GetVar Name="DocIconOverlayAltText" />
<HTML><![CDATA[" src="/_layouts/images/checkoutoverlay.gif" />]]></HTML>
</Else>
</IfEqual>
</Then>
<Else>
<HTML><![CDATA[<img class="ms-vb-icon-overlay" alt="*" src="/_layouts/images/]]></HTML>
<MapToOverlay>
<Column Name="IconOverlay" />
</MapToOverlay>
<HTML><![CDATA[" />]]></HTML>
</Else>
</IfEqual>
</SetVar>
<IfEqual>
<Expr1>
<LookupColumn Name="FSObjType" />
</Expr1>
<Expr2>1</Expr2>
<Then>
<FieldSwitch>
<Expr>
<GetVar Name="RecursiveView" />
</Expr>
<Case Value="1">
<GetVar Name="DocIconImg" />
<GetVar Name="DocIconOverlayImg" />
</Case>
<Default>
<SetVar Name="UnencodedFilterLink">
<SetVar Name="RootFolder">
<HTML>/</HTML>
<LookupColumn Name="FileRef" />
</SetVar>
<SetVar Name="SkipHost">1</SetVar>
<SetVar Name="FolderCTID">
<FieldSwitch>
<Expr>
<ListProperty Select="EnableContentTypes" />
</Expr>
<Case Value="1">
<Column Name="ContentTypeId" />
</Case>
</FieldSwitch>
</SetVar>
<FilterLink Default="" Paged="FALSE" />
</SetVar>
<FieldSwitch>
<Expr>
<GetVar Name="FileDialog" />
</Expr>
<Case Value="1">
<GetVar Name="DocIconImg" />
<GetVar Name="DocIconOverlayImg" />
</Case>
<Default>
<HTML><![CDATA[<a href="]]></HTML>
<GetVar Name="UnencodedFilterLink" HTMLEncode="TRUE" />
<HTML><![CDATA[" onmousedown="javascript:VerifyFolderHref(this,event, ']]></HTML>
<ScriptQuote NotAddingQuote="TRUE">
<GetVar Name="UnencodedFilterLink" />
</ScriptQuote>
<HTML><![CDATA[',']]></HTML>
<ScriptQuote NotAddingQuote="TRUE">
<ServerProperty Select="HtmlTrProgId">
<Column Name="File_x0020_Type" />
</ServerProperty>
</ScriptQuote>
<HTML><![CDATA[',']]></HTML>
<ScriptQuote NotAddingQuote="TRUE">
<ListProperty Select="DefaultItemOpen" />
</ScriptQuote>
<HTML><![CDATA[',']]></HTML>
<ScriptQuote NotAddingQuote="TRUE">
<MapToControl>
<Column Name="HTML_x0020_File_x0020_Type" />
<HTML>|</HTML>
<Column Name="File_x0020_Type" />
</MapToControl>
</ScriptQuote>
<HTML><![CDATA[',']]></HTML>
<ScriptQuote NotAddingQuote="TRUE">
<Column Name="HTML_x0020_File_x0020_Type" />
</ScriptQuote>
<HTML><![CDATA[',']]></HTML>
<ScriptQuote NotAddingQuote="TRUE">
<ServerProperty Select="GetServerFileRedirect">
<Field Name="ServerUrl" />
<HTML>|</HTML>
<Column Name="HTML_x0020_File_x0020_Type" />
</ServerProperty>
</ScriptQuote>
<HTML><![CDATA[')"]]></HTML>
<HTML><![CDATA[" onclick="return HandleFolder(this,event, ']]></HTML>
<ScriptQuote NotAddingQuote="TRUE">
<GetVar Name="UnencodedFilterLink" />
</ScriptQuote>
<HTML><![CDATA[',']]></HTML>
<ScriptQuote NotAddingQuote="TRUE">
<ServerProperty Select="HtmlTransform" />
</ScriptQuote>
<HTML><![CDATA[',']]></HTML>
<ScriptQuote NotAddingQuote="TRUE">
<ServerProperty Select="HtmlTrAcceptType">
<Column Name="File_x0020_Type" />
</ServerProperty>
</ScriptQuote>
<HTML><![CDATA[',']]></HTML>
<ScriptQuote NotAddingQuote="TRUE">
<ServerProperty Select="HtmlTrHandleUrl">
<Column Name="File_x0020_Type" />
</ServerProperty>
</ScriptQuote>
<HTML><![CDATA[',']]></HTML>
<ScriptQuote NotAddingQuote="TRUE">
<ServerProperty Select="HtmlTrProgId">
<Column Name="File_x0020_Type" />
</ServerProperty>
</ScriptQuote>
<HTML><![CDATA[',']]></HTML>
<ScriptQuote NotAddingQuote="TRUE">
<ListProperty Select="DefaultItemOpen" />
</ScriptQuote>
<HTML><![CDATA[',']]></HTML>
<ScriptQuote NotAddingQuote="TRUE">
<MapToControl>
<Column Name="HTML_x0020_File_x0020_Type" />
<HTML>|</HTML>
<Column Name="File_x0020_Type" />
</MapToControl>
</ScriptQuote>
<HTML><![CDATA[',']]></HTML>
<ScriptQuote NotAddingQuote="TRUE">
<Column Name="HTML_x0020_File_x0020_Type" />
</ScriptQuote>
<HTML><![CDATA[',']]></HTML>
<ScriptQuote NotAddingQuote="TRUE">
<ServerProperty Select="GetServerFileRedirect">
<Field Name="ServerUrl" />
<HTML>|</HTML>
<Column Name="HTML_x0020_File_x0020_Type" />
</ServerProperty>
</ScriptQuote>
<HTML><![CDATA[',']]></HTML>
<ScriptQuote NotAddingQuote="TRUE">
<Column Name="CheckoutUser" />
</ScriptQuote>
<HTML><![CDATA[',']]></HTML>
<ScriptQuote NotAddingQuote="TRUE">
<UserID AllowAnonymous="TRUE" />
</ScriptQuote>
<HTML><![CDATA[',']]></HTML>
<ScriptQuote NotAddingQuote="TRUE">
<ListProperty Select="ForceCheckout" />
</ScriptQuote>
<HTML><![CDATA[',']]></HTML>
<ScriptQuote NotAddingQuote="TRUE">
<Field Name="IsCheckedoutToLocal" />
</ScriptQuote>
<HTML><![CDATA[',']]></HTML>
<ScriptQuote NotAddingQuote="TRUE">
<Field Name="PermMask" />
</ScriptQuote>
<HTML><![CDATA[');">]]></HTML>
<GetVar Name="DocIconImg" />
<GetVar Name="DocIconOverlayImg" />
<HTML><![CDATA[</a>]]></HTML>
</Default>
</FieldSwitch>
</Default>
</FieldSwitch>
</Then>
<Else>
<HTML><![CDATA[<a href="]]></HTML>
<Field Name="ServerUrl" URLEncodeAsURL="TRUE" />
<HTML><![CDATA[" onclick="return DispEx(this,event,']]></HTML>
<ScriptQuote NotAddingQuote="TRUE">
<ServerProperty Select="HtmlTransform" />
</ScriptQuote>
<HTML><![CDATA[',']]></HTML>
<ScriptQuote NotAddingQuote="TRUE">
<ServerProperty Select="HtmlTrAcceptType">
<Column Name="File_x0020_Type" />
</ServerProperty>
</ScriptQuote>
<HTML><![CDATA[',']]></HTML>
<ScriptQuote NotAddingQuote="TRUE">
<ServerProperty Select="HtmlTrHandleUrl">
<Column Name="File_x0020_Type" />
</ServerProperty>
</ScriptQuote>
<HTML><![CDATA[',']]></HTML>
<ScriptQuote NotAddingQuote="TRUE">
<ServerProperty Select="HtmlTrProgId">
<Column Name="File_x0020_Type" />
</ServerProperty>
</ScriptQuote>
<HTML><![CDATA[',']]></HTML>
<ScriptQuote NotAddingQuote="TRUE">
<ListProperty Select="DefaultItemOpen" />
</ScriptQuote>
<HTML><![CDATA[',']]></HTML>
<ScriptQuote NotAddingQuote="TRUE">
<MapToControl>
<Column Name="HTML_x0020_File_x0020_Type" />
<HTML>|</HTML>
<Column Name="File_x0020_Type" />
</MapToControl>
</ScriptQuote>
<HTML><![CDATA[',']]></HTML>
<ScriptQuote NotAddingQuote="TRUE">
<Column Name="HTML_x0020_File_x0020_Type" />
</ScriptQuote>
<HTML><![CDATA[',']]></HTML>
<ScriptQuote NotAddingQuote="TRUE">
<ServerProperty Select="GetServerFileRedirect">
<Field Name="ServerUrl" />
<HTML>|</HTML>
<Column Name="HTML_x0020_File_x0020_Type" />
</ServerProperty>
</ScriptQuote>
<HTML><![CDATA[',']]></HTML>
<ScriptQuote NotAddingQuote="TRUE">
<Column Name="CheckoutUser" />
</ScriptQuote>
<HTML><![CDATA[',']]></HTML>
<ScriptQuote NotAddingQuote="TRUE">
<UserID AllowAnonymous="TRUE" />
</ScriptQuote>
<HTML><![CDATA[',']]></HTML>
<ScriptQuote NotAddingQuote="TRUE">
<ListProperty Select="ForceCheckout" />
</ScriptQuote>
<HTML><![CDATA[',']]></HTML>
<ScriptQuote NotAddingQuote="TRUE">
<Field Name="IsCheckedoutToLocal" />
</ScriptQuote>
<HTML><![CDATA[',']]></HTML>
<ScriptQuote NotAddingQuote="TRUE">
<Field Name="PermMask" />
</ScriptQuote>
<HTML><![CDATA[')">]]></HTML>
<GetVar Name="DocIconImg" />
<GetVar Name="DocIconOverlayImg" />
<HTML><![CDATA[</a>]]></HTML>
</Else>
</IfEqual>
</DisplayPattern>
</Field>
You can get DocIcon field of a library you want to modify icons for (through code) and modify its schema. As you can see there are a lot of XSLT in section, but it's quite simple and new patterns can be added without big problems (and old ones can be removed). Another way is to create your own custom field type and use it instead of standard one to display an icon.

Related

UI to manage one to many relationship between classes in custom module in Kentico

I have created a Clinic module within Kentico V12 with two classes: Doctor and Appointment. There is a 1 to many relationship between Doctor and Appointment. How could I display the name and surname of the doctors in the Appointment grid?
<?xml version="1.0" encoding="utf-8" ?>
<grid>
<actions>
<action name="edit" caption="$General.Edit$" fonticonclass="icon-edit" fonticonstyle="allow" />
<action name="#delete" caption="$General.Delete$" fonticonclass="icon-bin" fonticonstyle="critical" confirmation="$General.ConfirmDelete$" />
</actions>
<columns>
<column source="AppointmentPatientFirstName" caption="First name" wrap="false" localize="true">
<filter type="text" size="200" />
</column>
<column source="AppointmentPatientLastName" caption="Last name" wrap="false" localize="true">
<filter type="text" size="200" />
</column>
<column source="AppointmentPatientEmail" caption="Email" wrap="false" localize="true">
<filter type="text" size="200" />
</column>
<column source="AppointmentPatientPhoneNumber" caption="Phone Number" wrap="false" localize="true">
<filter type="text" size="15" />
</column>
<column source="Date" caption="Date" wrap="false" localize="true">
<filter type="text" size="200" />
</column>
<column source="AppointmentPatientBirthDate" caption="BirthDate" wrap="false" localize="true">
<filter type="text" size="200" />
</column>
<column source="AppointmentDoctorID" caption="Doctor ID" wrap="false" localize="true">
<filter type="text" size="200" />
</column>
</columns>
<options>
<key name="DisplayFilter" value="true" />
</options>
</grid>
Kind regards.
Appointment List: https://i.stack.imgur.com/Ft1pE.png
Using this column AppointmentDoctorID modify the XML to use a transformation like so:
<column source="AppointmentDoctorID" caption="Doctor" externalsourcename="#transform: yournamespace.doctor: {%FirstName%} {%LastName%}" wrap="false" localize="true"></column>
Check out more documentation on unigrids in the Kentico Documentation.

Phonegap shows error - “Oh geez. Your build failed.”

I am using Phonegap Build for my Android app and am running into the following error when compiling:
Oh geez. Your build failed. Click the "Log" button above to view the compile log. If you need help diagnosing the issue, you can post to the support forum with your App ID.
XML
<?xml version="1.0" encoding="utf-8" ?>
<widget xmlns = "http://www.w3.org/ns/widgets"
xmlns:gap = "http://phonegap.com/ns/1.0"
xmlns:android = "http://schemas.android.com/apk/res/android"
id = "kmcrs.mobibbhvle.app"
versionCode = "22"
version = "2.2">
<name>bobile App</name>
<description>
bobile mobile app version
</description>
<author email="mmakhan669#gmail.com" href="ujairo.com">
Ujairo.com
</author>
<content src="index.html" />
<preference name="orientation" value="portrait" />
<preference name="android-build-tool" value="gradle" />
<preference name="phonegap-version" value="cli-7.1.0" />
<gap:plugin name="cordova-plugin-whitelist" source="npm" />
<gap:plugin name="phonegap-plugin-push" source="npm" spec="1.11.1" />
<gap:plugin name="cordova-plugin-device" source="npm" />
<gap:plugin name="cordova-plugin-inappbrowser" source="npm" />
<gap:plugin name="cordova-plugin-splashscreen" source="npm" />
<gap:plugin name="cordova-plugin-geolocation" source="npm" spec="1.0.1" />
<gap:plugin name="cordova-plugin-network-information" source="npm" />
<gap:plugin name="cordova-plugin-request-location-accuracy" source="npm" spec="2.2.3" />
<gap:plugin name="cordova-plugin-x-toast" source="npm" spec="2.6.2" />
<gap:plugin name="cordova-plugin-media" source="npm" spec="5.0.0" />
<gap:plugin name="cordova.plugins.diagnostic" source="npm" spec="4.0.8" />
<gap:plugin name="cordova-plugin-googlemaps" source="npm" spec="2.3.10" >
<param name="API_KEY_FOR_ANDROID" value="AIzaSyBSkBzEjEwIC-0uuJmNVvBgC4Lomn1qX2k" />
<param name="API_KEY_FOR_IOS" value="your key" />
<param name="LOCATION_WHEN_IN_USE_DESCRIPTION" value="Karenderia wants to use your location" />
<param name="LOCATION_ALWAYS_USAGE_DESCRIPTION" value="Karenderia want to always use your location" />
</gap:plugin>
<gap:plugin name="cordova-plugin-buildinfo" source="npm" spec="2.0.2" />
<gap:plugin name="cordova-plugin-googleplus" source="npm">
<variable name="REVERSED_CLIENT_ID" value="" />
</gap:plugin>
<platform name="android" />
<platform name="ios" />
<preference name="AutoHideSplashScreen" value="false" />
<preference name="SplashScreenDelay" value="10000" />
<preference name="fullscreen" value="false" />
<preference name="android-minSdkVersion" value="16" />
<preference name="ShowSplashScreenSpinner" value="false" />
<access origin="*" />
<access origin="tel:*" launch-external="yes" />
<gap:config-file platform="android" parent="/manifest">
<supports-screens android:xlargeScreens="true" android:largeScreens="true" android:smallScreens="true" />
<application android:theme="#android:style/Theme.NoTitleBar" >
</application>
</gap:config-file>
<preference name="phonegap-version" value="cli-7.1.0" />
<gap:plugin name="cordova-plugin-camera" source="npm" spec="2.4.1" />
<platform name="ios">
<config-file platform="ios" target="*-Info.plist" parent="NSLocationAlwaysUsageDescription">
<string>Karenderia want to always use your location</string>
</config-file>
<config-file platform="ios" target="*-Info.plist" parent="NSLocationWhenInUseUsageDescription">
<string>Karenderia wants to use your location</string>
</config-file>
</platform>
<edit-config target="NSCameraUsageDescription" file="*-Info.plist" mode="merge">
<string>need camera access to take pictures</string>
</edit-config>
<edit-config target="NSPhotoLibraryUsageDescription" file="*-Info.plist" mode="merge">
<string>need to photo library access to get pictures from there</string>
</edit-config>
<edit-config target="NSLocationWhenInUseUsageDescription" file="*-Info.plist" mode="merge">
<string>need location access to find things nearby</string>
</edit-config>
<edit-config target="NSPhotoLibraryAddUsageDescription" file="*-Info.plist" mode="merge">
<string>need to photo library access to save pictures there</string>
</edit-config>
<platform name="android">
<resource-file src="www/beep.wav" target="res/raw/beep.wav" />
<icon density="ldpi" src="res/icons/android/drawable-ldpi-icon.png" />
<icon density="mdpi" src="res/icons/android/drawable-mdpi-icon.png" />
<icon density="hdpi" src="res/icons/android/drawable-hdpi-icon.png" />
<icon density="xhdpi" src="res/icons/android/drawable-xhdpi-icon.png" />
<icon density="xxhdpi" src="res/icons/android/drawable-xxhdpi-icon.png" />
<icon density="xxxhdpi" src="res/icons/android/drawable-xxxhdpi-icon.png" />
<splash density="land-ldpi" src="res/screens/android/drawable-land-ldpi-screen.png" />
<splash density="land-mdpi" src="res/screens/android/drawable-land-mdpi-screen.png" />
<splash density="land-hdpi" src="res/screens/android/drawable-land-hdpi-screen.png" />
<splash density="land-xhdpi" src="res/screens/android/drawable-land-xhdpi-screen.png" />
<splash density="land-xxhdpi" src="res/screens/android/drawable-land-xxhdpi-screen.png" />
<splash density="land-xxxhdpi" src="res/screens/android/drawable-land-xxxhdpi-screen.png" />
<splash density="port-ldpi" src="res/screens/android/drawable-port-ldpi-screen.png" />
<splash density="port-mdpi" src="res/screens/android/drawable-port-mdpi-screen.png" />
<splash density="port-hdpi" src="res/screens/android/drawable-port-hdpi-screen.png" />
<splash density="port-xhdpi" src="res/screens/android/drawable-port-xhdpi-screen.png" />
<splash density="port-xxhdpi" src="res/screens/android/drawable-port-xxhdpi-screen.png" />
<splash density="port-xxxhdpi" src="res/screens/android/drawable-port-xxxhdpi-screen.png" />
</platform>
<platform name="ios">
<icon height="57" platform="ios" src="res/icons/ios/icon.png" width="57" />
<icon height="114" platform="ios" src="res/icons/ios/icon#2x.png" width="114" />
<icon height="40" platform="ios" src="res/icons/ios/icon-40.png" width="40" />
<icon height="80" platform="ios" src="res/icons/ios/icon-40#2x.png" width="80" />
<icon height="50" platform="ios" src="res/icons/ios/icon-50.png" width="50" />
<icon height="100" platform="ios" src="res/icons/ios/icon-50#2x.png" width="100" />
<icon height="60" platform="ios" src="res/icons/ios/icon-60.png" width="60" />
<icon height="120" platform="ios" src="res/icons/ios/icon-60#2x.png" width="120" />
<icon height="180" platform="ios" src="res/icons/ios/icon-60#3x.png" width="180" />
<icon height="72" platform="ios" src="res/icons/ios/icon-72.png" width="72" />
<icon height="144" platform="ios" src="res/icons/ios/icon-72#2x.png" width="144" />
<icon height="76" platform="ios" src="res/icons/ios/icon-76.png" width="76" />
<icon height="152" platform="ios" src="res/icons/ios/icon-76#2x.png" width="152" />
<icon height="29" platform="ios" src="res/icons/ios/icon-small.png" width="29" />
<icon height="58" platform="ios" src="res/icons/ios/icon-small#2x.png" width="58" />
<icon height="87" platform="ios" src="res/icons/ios/icon-small#3x.png" width="87" />
<splash height="1136" platform="ios" src="res/screens/ios/Default-568h#2x~iphone.png" width="640" />
<splash height="1334" platform="ios" src="res/screens/ios/Default-667h.png" width="750" />
<splash height="2208" platform="ios" src="res/screens/ios/Default-736h.png" width="1242" />
<splash height="1242" platform="ios" src="res/screens/ios/Default-Landscape-736h.png" width="2208" />
<splash height="1536" platform="ios" src="res/screens/ios/Default-Landscape#2x~ipad.png" width="2048" />
<splash height="768" platform="ios" src="res/screens/ios/Default-Landscape~ipad.png" width="1024" />
<splash height="2048" platform="ios" src="res/screens/ios/Default-Portrait#2x~ipad.png" width="1536" />
<splash height="1024" platform="ios" src="res/screens/ios/Default-Portrait~ipad.png" width="768" />
<splash height="960" platform="ios" src="res/screens/ios/Default#2x~iphone.png" width="640" />
<splash height="480" platform="ios" src="res/screens/ios/Default~iphone.png" width="320" />
</platform>
</widget>
Compile logs here.
If you scroll all the way down in your logs, you will see multiple error message:
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':processDebugManifest'.
> Manifest merger failed : uses-sdk:minSdkVersion 16 cannot be smaller than version 19 declared in library [:tbxml-android:] /build/intermediates/exploded-aar/tbxml-android/AndroidManifest.xml
Suggestion: use tools:overrideLibrary="za.co.twyst" to force usage
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Total time: 7.29 secs
Error: /gradlew: Command failed with exit code 1 Error output:
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
/AndroidManifest.xml:38:5-74 Error:
uses-sdk:minSdkVersion 16 cannot be smaller than version 19 declared in library [:tbxml-android:] /build/intermediates/exploded-aar/tbxml-android/AndroidManifest.xml
Suggestion: use tools:overrideLibrary="za.co.twyst" to force usage
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':processDebugManifest'.
> Manifest merger failed : uses-sdk:minSdkVersion 16 cannot be smaller than version 19 declared in library [:tbxml-android:] /build/intermediates/exploded-aar/tbxml-android/AndroidManifest.xml
Suggestion: use tools:overrideLibrary="za.co.twyst" to force usage
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
at ChildProcess.whenDone (/cordova/node_modules/cordova-common/src/superspawn.js:169:23)
at emitTwo (events.js:106:13)
at ChildProcess.emit (events.js:191:7)
at maybeClose (internal/child_process.js:877:16)
at Process.ChildProcess._handle.onexit (internal/child_process.js:226:5)
They all point to the same issue, there is something (most probably a plugin) that requires minimum SDK version 16, while the minimum of the project is 19. The minimum SDK version of 19 is set by the cordova-plugin-googlemaps plugin. You'll have to find out which of these plugins requires minimum SDK version 16 and see if there is an update available.

TFS 2012 Process Template - Column Updates not Displaying for Product and Iteration Backlogs -

I've update the AgileConfiguration.xml process template to include specific columns, column order and widths to match how our teams work. After importing the process configuration, I was expecting the changes to be reflected in Web Access product and iteration backlog pages. The changes do not appear, rather I see my personal column changes I may have made over time. I've tested in a new Team Project, the changes appear.
How can I remove my personal modifications and test to ensure the changes are applied? Further, how can I ensure all users receive the updates if they have made their own changes?
Example of the template:
<?xml version="1.0" encoding="utf-16"?>
<AgileProjectConfiguration>
<IterationBacklog>
<Columns>
<Column width="65" refname="System.WorkItemType" />
<Column width="400" refname="System.Title" />
<Column width="60" refname="System.State" />
<Column width="45" refname="Microsoft.VSTS.Scheduling.RemainingWork" />
<Column width="90" refname="System.AssignedTo" />
<Column width="40" refname="Microsoft.VSTS.Common.Priority" />
<Column width="100" refname="Microsoft.VSTS.Common.Triage" />
<Column width="50" refname="Custom.SCRID" />
<Column width="250" refname="System.AreaPath" />
</Columns>
</IterationBacklog>
<ProductBacklog>
<AddPanel>
<Fields>
<Field refname="System.Title" />
</Fields>
</AddPanel>
<Columns>
<Column width="65" refname="System.WorkItemType" />
<Column width="400" refname="System.Title" />
<Column width="60" refname="System.State" />
<Column width="45" refname="Microsoft.VSTS.Scheduling.Effort" />
<Column width="90" refname="System.AssignedTo" />
<Column width="100" refname="Microsoft.VSTS.Common.Triage" />
<Column width="150" refname="System.IterationPath" />
<Column width="50" refname="Custom.SCRID" />
<Column width="50" refname="Microsoft.VSTS.Common.BacklogPriority" />
<Column width="250" refname="System.AreaPath" />
</Columns>
</ProductBacklog>
</AgileProjectConfiguration>

Ext Net TimeField in an editable grid

I have a grid panel which display two TimeSpans in two columns and all is well when I load the page but when I go server side the validation on my editors always fail. I don't understand why the store can display the TimeSpans but cannot return it after...
Here my code :
<ext:GridPanel ID="WeekParams" runat="server" >
<Store>
<ext:Store runat="server">
<Reader>
<ext:JsonReader IDProperty="GUID">
<Fields>
<ext:RecordField Name="Day" Type="String" />
<ext:RecordField Name="UATNumber" Type="int" />
<ext:RecordField Name="From" Type="Date" />
<ext:RecordField Name="To" Type="Date" />
</Fields>
</ext:JsonReader>
</Reader>
</ext:Store>
</Store>
<ColumnModel>
<Columns>
<ext:Column ColumnID="Day" DataIndex="Day" />
<ext:NumberColumn ColumnID="UATNumber" DataIndex="UATNumber" Format="0" />
<ext:DateColumn ColumnID="From" DataIndex="From" Format="dd/MM/yyyy" >
<Renderer Format="Date" FormatArgs="'HH:mm'" />
<Editor>
<ext:TimeField runat="server" />
</Editor>
</ext:DateColumn>
<ext:DateColumn ColumnID="To" DataIndex="To" Format="dd/MM/yyyy" >
<Renderer Format="Date" FormatArgs="'HH:mm'" />
<Editor>
<ext:TimeField runat="server" />
</Editor>
</ext:DateColumn>
</Columns>
</ColumnModel>
<Plugins>
<ext:EditableGrid runat="server" />
</Plugins>
</ext:GridPanel>
And here the result when I'm going to the server side :

NLog code line logging

I am using NLog to log error messages into csv:
<target name="csv" xsi:type="File"
fileName="${basedir}/Logs/log.csv"
archiveFileName="${basedir}/Logs/Archives/log.{#####}.csv"
archiveAboveSize="10240"
archiveNumbering="Sequence"
concurrentWrites="true"
keepFileOpen="false">
<layout xsi:type="CSVLayout" delimiter="Comma" withHeader="false">
<column name="time" layout="${longdate}" />
<column name="message" layout="${message}" />
<column name="logger" layout="${logger}"/>
<column name="level" layout="${level}"/>
</layout>
</target>
How can I add a column to track the code line number?
Thank you.
Try to add ${callsite} layout renderer.
<column name="source" layout="${callsite:fileName=true}" />

Resources