Microsoft Flow / Automate – Add user to SharePoint Group

In Microsoft flow there is no built in action to add a user to a SharePoint group. One way to achieve this is to use the “Send HTTP request to SharePoint”

sendhttprequest

in this action you need to

  1. Set the URL of the Site
  2. Set method to “POST”
  3. URI set to
    • “_api/web/sitegroups({GROUPID})/users” , example: _api/web/sitegroups(10)/users
    • “_api/web/sitegroups/GetByName(‘{GROUPNAME}’)/users” , example: _api/web/sitegroups/GetByName(‘SharePoint Members’)/users
  4. Add header with key=”accept” and value = “application/json;odata.metadata=none”
  5. Add header with key =”content-type” and value = “application/json”
  6. Set the Body to be {‘LoginName’:’i:0#.f|membership|[EMAIL ADDRESS]’}, example: {‘LoginName’:’i:0#.f|membership|john.doe@domainOnMicrosoft.com’}

It would look like this

sendhttprequest2

or

This is tested with a SharePoint online connection but assume might work with on premise SharePoint as well.

Defining default values for complex SharePoint types in forms

Tags

, ,

Getting Started

To get started go to https://web.powerapps.com, click on start from blank or open one of your existing apps that are connected to a SharePoint list.  These steps will help you when you have a form on your app connected to your SharePoint list.  To add a form, click on Insert on the top of the studio then click on Forms, then edit. The form will appear on your screen and will show the data panel. Select your SharePoint list or if you do not have one in the drop down click on “Add a data source” to select one.

Once you select your SharePoint list you will notice that all of the columns from your list will be checked, uncheck any of the columns that you do not need. Often when we’re creating an app that uses a SharePoint list as the data source, we want to define certain values to be selected by default when creating new items.

Text / number / date columns

To change the default value for any column in the edit form, you need to update the property that defines the default value in the control that is used to edit that property. You’ll also only want to define that default value for new items – if the form is editing an existing item, the form should display the current value for that column. You can do that with the If function, checking for the Mode property of the edit form control. For example, if you want to define the default value for a numeric column to zero, you can change the Default property of the text input control in the form from:

Parent.Default

to

If(EditForm1.Mode = FormMode.New, 0, Parent.Default)

Where EditForm1 is the name of the edit form control. In this formula, if the form is being used to add new items, then the default (zero) will be used. Otherwise (edit or view mode) the control will use the default value from the card, which has the current value for the selected item. Notice that you will have to unlock the card to update the property of the text input control. To do that, select the control (or the card), and in the property panel on the far right, click on Advanced, and then click on “Unlock to change properties”.

Text columns are similar – they use the same text input control by default as numeric columns. Date columns use the date picker control, and the expression would also be similar, except that it would use the DefaultDate property of that control.

Choice columns

Unlike “simple” controls like the text input or the date picker that have a single default value, the combo box control has a different way of defining its default values, so, the default expression needs to be defined appropriately. The combo box control is used in Choice, Lookup and Person column types – and since those types have the option of single and multiple selection, the default expression will change accordingly.

Choice columns are those where the user can select from a pre-defined list of values. For example, if you have a column called ‘TimeOfDay’, we could have the list of [‘Morning’, ‘Afternoon’, ‘Evening’ and ‘Night’] as possible values – that’s a typical single-selection scenario. Or if you have a list that stores kitchen products, a column called ‘Intended Uses’ with possible values [‘Day-to-day’, ‘Formal dining’, ‘Gifts’, ‘Other’] would be a scenario where multiple selections are acceptable. In forms choice columns are mapped to the combo box control – which uses the DefaultSelectedItems property to determine the default values – and the value of this property can be both a single item (for the case of single selection columns) or a table (for the case of multiple selection scenarios).

While choice columns on the surface look like a text column with certain restriction, they are implemented in SharePoint as an object, that references the list of possibilities for that column. If you tried to define the default property as follows:

If(
    EditForm1.Mode = FormMode.New,
    "Morning",
    Parent.Default)

It would give an error. Instead, you need to define it as a record with a property called Value, and that would define ‘Morning’ as the default value for that card when the card is in the New mode:

If(
    EditForm1.Mode = FormMode.New,
    { Value: "Morning" },
    Parent.Default)

For columns that support multiple selections, you need to use a table (collection) of data instead. So if you want to define the that ‘Day-to-day’ and ‘Gifts’ are the default values for the ‘Intended Uses’ column, we would use the following expression:

If(
    EditForm1.Mode = FormMode.New,
    Table({ Value: "Day-to-day" }, { Value: "Gifts" }),
    Parent.Default)

Lookup columns

Those are columns for which the user can select a value from another table. This time, using the value only is not enough – it’s possible that there are multiple items in the table that is being looked up that have the same value for the referenced column, so we also need to specify the Id property of those values. The best way to retrieve it is to use the Choices function, which returns both the referenced column in the lookup, as well as the identifier of the value. So if you have a column named ‘Department’ of type lookup to another list ‘Departments’, and we know that the value that you want to use as the default is ‘Sales’, we can use a LookUp function if the column only allows single selection:

If(
    EditForm1.Mode = FormMode.New,
    LookUp(
        Choices(MyListName.Department),
        Value = "Sales"),
    Parent.Default)

Likewise, if the column supports multiple selection, then you’d use a Filter expression on the possible choices to define the default selected values:

If(
    EditForm1.Mode = FormMode.New,
    Filter(
        Choices(MyListName.RelatedDepartments),
        Value = "Sales" Or Value = "Human Resources"),
    Parent.Default)

Kofax TotalAgility C# Sending Email

Kofax TotalAgility to send Email

using System;
using System.Net;
using System.Net.Mail;
using Agility.Server.Scripting.ScriptAssembly;
using TotalAgility.Sdk;
using Agility.Sdk.Model.Capture;
using System.IO;
using System.Net.Mime;
//using System.Collections.Specialized;
using System.Collections;
using System.Collections.Generic;

namespace MyNamespace
{

	public class Class1
	{
		CaptureDocumentService cds = new CaptureDocumentService();
		public Class1()
		{
		}

		[StartMethodAttribute()]
		public void Method1(ScriptParameters sp)
		{
			var folderId = (string)sp.InputVariables["
KeyFolder
Process variable
"];
			var sessionId = (string)sp.InputVariables["
SPP_SYSTEM_SESSION_ID
Server variable
"];
			var SMTPlogin = (string)sp.InputVariables["
SMTP User
Server variable
"];
			var SMTPpassword = (string)sp.InputVariables["
SMTP Password
Server variable
"];

			var smtpClient = new SmtpClient("127.0.0.1")
			{
				Port = 2525,
				Credentials = new NetworkCredential(SMTPlogin, SMTPpassword),
				EnableSsl = false,
			};

			var mailMessage = new MailMessage
			{
				From = new MailAddress((string)sp.InputVariables["
EmailFrom
Process variable
"]),
				Subject = "KTA " + (string)sp.InputVariables["
InEmail_SRC
Process variable
"] + " " + (string)sp.InputVariables["
Out_No
Process variable
"] + " " + "|" + " " + (string)sp.InputVariables["
DocType_CURR
Process variable
"],
				Body = "PDF KTA Sending Test Document into Email. \n\nRef: " +  (string)sp.InputVariables["
Out_Ref
Process variable
"] 
			};
			mailMessage.To.Add((string)sp.InputVariables["
EmailTo
Process variable
"]);

			string idMerge = (string)sp.InputVariables["
KeyFolderMergeID
Process variable
"];

			Folder folder = cds.GetFolder(sessionId, null, folderId);

//			Agility.Sdk.Model.Server.StringCollection collDocId = new Agility.Sdk.Model.Server.StringCollection();
//List<string> listDocId = new List<string>();
			//Console.WriteLine( "Initial contents of the StringCollection:" );
			
			foreach (var doc in folder.Documents)
			{
				Stream docStream = cds.GetDocumentFile(sessionId, null, doc.Id, "pdf");
				// "application/pdf" 
				// MediaTypeNames.Application.Pdf
				var attachment = new Attachment(docStream, (string)sp.InputVariables["
DocType_CURR
Process variable
"] + "_" + doc.Id + ".pdf", "application/pdf");
				mailMessage.Attachments.Add(attachment);
//				collDocId.Add( doc.Id );
//    		listDocId.Add(doc.Id );
			}
//string[] arrStr = listDocId.ToArray();
/*
			if(listDocId.Count>0) {
				idMerge = arrStr[0];
				sp.OutputVariables["
KeyFolderMergeID
Process variable
"] = idMerge;
//collDocId.AddRange(arrStr);
				//sp.OutputVariables["
tempMSG
Process variable
"] = "Merge DocId: " + string.Join(",", collDocId);
			}else
			{
				//Console.WriteLine("NoData");
				sp.OutputVariables["
KeyFolderMergeID
Process variable
"] = "";
			}


			//
			Stream docMStream = cds.GetDocumentFile(sessionId, null, idMerge , "pdf");

				//cds.MergeDocuments(sessionId , collDocId );
			var attachmentM = new Attachment(docMStream , (string)sp.InputVariables["
DocType_CURR
Process variable
"] + "_" + idMerge + "-Merge.pdf", "application/pdf");
			mailMessage.Attachments.Add(attachmentM);
*/
			smtpClient.Send(mailMessage);
		}
	}
}

C# Sample

using System;
using System.Net;
using System.Net.Mail;
using Agility.Server.Scripting.ScriptAssembly;
using TotalAgility.Sdk;
using Agility.Sdk.Model.Capture;
using System.IO;
using System.Net.Mime;
//using System.Collections.Specialized;
using System.Collections;
using System.Collections.Generic;

namespace MyNamespace
{

	public class Class1
	{
		CaptureDocumentService cds = new CaptureDocumentService();
		public Class1()
		{
		}

		[StartMethodAttribute()]
		public void Method1(ScriptParameters sp)
		{
			var folderId = (string)sp.InputVariables["
KeyFolderShipment
Process variable
"];
			var sessionId = (string)sp.InputVariables["
SPP_SYSTEM_SESSION_ID
Server variable
"];
			var SMTPlogin = (string)sp.InputVariables["
SMTP User
Server variable
"];
			var SMTPpassword = (string)sp.InputVariables["
SMTP Password
Server variable
"];

			var smtpClient = new SmtpClient("127.0.0.1")
			{
				Port = 2525,
				Credentials = new NetworkCredential(SMTPlogin, SMTPpassword),
				EnableSsl = false,
			};

			var mailMessage = new MailMessage
			{
				From = new MailAddress((string)sp.InputVariables["
EmailFrom
Process variable
"]),
				Subject = "KTA " + (string)sp.InputVariables["
InEmail_SRC
Process variable
"] + " " + (string)sp.InputVariables["
Out_ShipNo
Process variable
"] + " " + "|" + " " + (string)sp.InputVariables["
DocType_CURR
Process variable
"],
				Body = "PDF IMP Sending Test Document into Email. \n\nDN: " +  (string)sp.InputVariables["
Out_DN
Process variable
"] 
			};
			mailMessage.To.Add((string)sp.InputVariables["
EmailTo
Process variable
"]);

			string idMerge = (string)sp.InputVariables["
KeyFolderMergeID
Process variable
"];

			Folder folder = cds.GetFolder(sessionId, null, folderId);

//			Agility.Sdk.Model.Server.StringCollection collDocId = new Agility.Sdk.Model.Server.StringCollection();
//List<string> listDocId = new List<string>();
			//Console.WriteLine( "Initial contents of the StringCollection:" );
			
			foreach (var doc in folder.Documents)
			{
				Stream docStream = cds.GetDocumentFile(sessionId, null, doc.Id, "pdf");
				// "application/pdf" 
				// MediaTypeNames.Application.Pdf
				var attachment = new Attachment(docStream, (string)sp.InputVariables["
DocType_CURR
Process variable
"] + "_" + doc.Id + ".pdf", "application/pdf");
				mailMessage.Attachments.Add(attachment);
//				collDocId.Add( doc.Id );
//    		listDocId.Add(doc.Id );
			}
//string[] arrStr = listDocId.ToArray();
/*
			if(listDocId.Count>0) {
				idMerge = arrStr[0];
				sp.OutputVariables["
KeyFolderMergeID
Process variable
"] = idMerge;
//collDocId.AddRange(arrStr);
				//sp.OutputVariables["
tempMSG
Process variable
"] = "Merge DocId: " + string.Join(",", collDocId);
			}else
			{
				//Console.WriteLine("NoData");
				sp.OutputVariables["
KeyFolderMergeID
Process variable
"] = "";
			}


			//
			Stream docMStream = cds.GetDocumentFile(sessionId, null, idMerge , "pdf");

				//cds.MergeDocuments(sessionId , collDocId );
			var attachmentM = new Attachment(docMStream , (string)sp.InputVariables["
DocType_CURR
Process variable
"] + "_" + idMerge + "-Merge.pdf", "application/pdf");
			mailMessage.Attachments.Add(attachmentM);
*/
			smtpClient.Send(mailMessage);
		}
	}
}

Kofax TotalAgility C# to Move Folder

Kofax TotalAgility to Move Folder


using System; 
using Agility.Server.Scripting.ScriptAssembly;

using TotalAgility.Sdk;
using Agility.Sdk.Model.Capture;
using System.Text.RegularExpressions;
 
namespace MyNamespace
{
    
 public class Class1
 {
  public Class1() 
  {
  }
 
  [StartMethodAttribute()] 
  public void Method1(ScriptParameters sp) 
  {
	//			
	// TODO: Add start method code here
	//

	CaptureDocumentService cds = new CaptureDocumentService();
// get all documents in folder
	string temp ="";
	string text = "";
	string doctype = "";
	int i = 0;
	string sessionId = sp.InputVariables["
SPP_SYSTEM_SESSION_ID
Server variable
"].ToString();
	string folderId =  sp.InputVariables["
Folder.InstanceID
Process variable
"].ToString();
	Folder folder = cds.GetFolder(sessionId, null, folderId);
	foreach (Document document in folder.Documents)
	{
	    	//Console.WriteLine(string.Format("{0} ({2}): {1}", document.Id, document.FileName, document.MimeType));
	temp = temp + "| " + i.ToString() + " - " + document.Id + " , DocType: " + document.DocumentType.Identity.Name;


	string tempDocType = document.DocumentType.Identity.Name.ToUpper();
	Regex pattern = new Regex(@"(?<DocuType>.*?)\-.*", RegexOptions.IgnoreCase);
	Match match = pattern.Match(tempDocType );		
	if(match.Groups["DocuType"].Value.Length>0){
		doctype = match.Groups["DocuType"].Value;
	}else{
		doctype = tempDocType ;
	}
////


	if(doctype == "INT_DOC" || doctype == "CLM_DOC"){
		cds.MoveDocument(sessionId, null, document.Id, sp.InputVariables["
dtINT_DOC_fid
Process variable
"] ,-1);

	}else if(doctype == "ABL_LOADLS_CNTNR" ){
		cds.MoveDocument(sessionId, null, document.Id, sp.InputVariables["
dtABL_LOADLS_CNTNR_fid
Process variable
"] ,-1);

	}else if(doctype == "ADV_BCONF" ){
		cds.MoveDocument(sessionId, null, document.Id, sp.InputVariables["
dtABL_LOADLS_CNTNR_fid
Process variable
"] ,-1);


	}else if(doctype == "ADV_DELIVERY" ){
		cds.MoveDocument(sessionId, null, document.Id, sp.InputVariables["
dtADV_DELIVERY_fid
Process variable
"] ,-1);

	}else if(doctype == "BL_HOUSE_HBL" ){
		cds.MoveDocument(sessionId, null, document.Id, sp.InputVariables["
dtBL_HOUSE_HBL_fid
Process variable
"] ,-1);

	}else if(doctype == "PCKLST" ){
		cds.MoveDocument(sessionId, null, document.Id, sp.InputVariables["
dtPCKLST_fid
Process variable
"] ,-1);

	}else if(doctype == "POS_PICKLIST" ){
		cds.MoveDocument(sessionId, null, document.Id, sp.InputVariables["
dtPOS_PICKLIST_fid
Process variable
"] ,-1);

	}else if(doctype == "WHS_INV" ){
		cds.MoveDocument(sessionId, null, document.Id, sp.InputVariables["
dtWHS_INV_fid
Process variable
"] ,-1);

	}else if(doctype == "WHS_LoadList" ){
		cds.MoveDocument(sessionId, null, document.Id, sp.InputVariables["
dtWHS_LoadList_fid
Process variable
"] ,-1);


	}else if(doctype == "WHS_LOADLIST" ){
		cds.MoveDocument(sessionId, null, document.Id, sp.InputVariables["
dtWHS_LoadList_fid
Process variable
"] ,-1);


	}else if(doctype == "WHS_ShipInstr" ){
		cds.MoveDocument(sessionId, null, document.Id, sp.InputVariables["
dtWHS_ShipInstr_fid
Process variable
"] ,-1);

	}else if( doctype == "WHS_SHIPINSTR"){
		cds.MoveDocument(sessionId, null, document.Id, sp.InputVariables["
dtWHS_ShipInstr_fid
Process variable
"] ,-1);


	}else if(doctype == "WHS_VALRP" ){
		cds.MoveDocument(sessionId, null, document.Id, sp.InputVariables["
dtWHS_VALRP_fid
Process variable
"] ,-1);

	}else{
		//Console.WriteLine("UNK") as OTHERS;
		cds.MoveDocument(sessionId, null, document.Id, sp.InputVariables["
dtINT_DOC_fid
Process variable
"] ,-1);


	}

//

	}

	sp.OutputVariables["
tempMSG
Process variable
"] = sessionId  + " _ " + folderId  + "_" + temp;

  }
 }
}

Kofax TotalAgility VB.NET writing PDF

This Script will write as the PDF file for Kofax TotalAgility

Imports System
Imports Agility.Server.Scripting.ScriptAssembly

Imports TotalAgility.Sdk
Imports Agility.Sdk.Model.Capture
Imports System.IO

Namespace MyNamespace

	Public Class Class1

		<StartMethodAttribute()> Public Sub Method1(ByVal sp As ScriptParameters)
			'			
			' TODO: Add start method code here
			'
			dim filepath as string = sp.inputvariables("
KTATempFilePath
Process variable
") & "\" & sp.inputvariables("
SPP_SYSTEM_SESSION_ID
Server variable
") & ".pdf"


			Dim ExportPath as string = sp.Inputvariables("
KTATempFilePath
Process variable
")

			Dim fileName As String =sp.inputvariables("
SPP_SYSTEM_SESSION_ID
Server variable
") 

			Dim sessionID As String = sp.Inputvariables("
SPP_SYSTEM_SESSION_ID
Server variable
")
			Dim DocID As String = sp.inputvariables("
Document.InstanceID
Process variable
") 

			Dim pdfFile As Stream = cds.GetDocumentFile(sessionID, Nothing, DocID, "pdf")
			Dim fs As FileStream = New FileStream(Path.Combine(ExportPath & "\" & fileName & ".pdf"), FileMode.Create, FileAccess.Write)
			pdfFile.CopyTo(fs)
			fs.Close()
			pdfFile.Close()

	      	End Sub

	      	Private cds As CaptureDocumentService
      		      	Public Sub New()
	      	      	cds = New CaptureDocumentService()
	      	End Sub

	End Class
End Namespace

Kill the process that currently open the a port on localhost Windows

Step 1:

Open up cmd.exe (note: you may need to run it as an administrator, but this isn’t always necessary), then run the below command:

netstat -ano | findstr :<PORT>

(Replace <PORT> with the port number you want, but keep the colon)

The area circled in red shows the PID (process identifier). Locate the PID of the process that’s using the port you want.

Step 2:

Next, run the following command:

taskkill /PID <PID> /F

(No colon this time)

Lastly, you can check whether the operation succeeded or not by re-running the command in “Step 1”. If it was successful you shouldn’t see any more search results for that port number.

Sample to kill port 50080:

How to unzip a file using the cmd?

Tags

, , ,

On Windows 10 build 17063 or later you can use tar.exe (similar to the *nix one). This is also available in the nanoserver docker container

C:\> tar -xf archive.zip

_________

ZipFile="C:\Users\spvaidya\Music\folder.zip"
ExtractTo="C:\Users\spvaidya\Music\"




'If the extraction location does not exist create it.

Set fso = CreateObject("Scripting.FileSystemObject")

If NOT fso.FolderExists(ExtractTo) Then



 fso.CreateFolder(ExtractTo)

End If

'Extract the contants of the zip file.

set objShell = CreateObject("Shell.Application")

set FilesInZip=objShell.NameSpace(ZipFile).items

objShell.NameSpace(ExtractTo).CopyHere(FilesInZip)

Set fso = Nothing
Set objShell = Nothing

The following vbscript can be saved as file.vbs and then run using batch script like:

file.vbs

save this in .bat file and run it.

________

If you have Windows 10 (and powershell), but still want to unzip from within .bat/.cmd-file (cmd.exe), you can use

powershell -command "Expand-Archive -Force '%~dp0my_zip_file.zip' '%~dp0'"

where my_zip_file.zip is the file to be unzipped and %~dp0 points to the same folder are where the .bat/.cmd-file is (Change the folder, if needed).

Expand-Archive -Force C:\path\to\archive.zip C:\where\to\extract\to

________

This batch file code will help you to unzip a file.

@echo off
setlocal
cd /d %~dp0
Call :UnZipFile "C:\Temp\" "c:\FolderName\batch.zip"
exit /b

:UnZipFile <ExtractTo> <newzipfile>
set vbs="%temp%\_.vbs"
if exist %vbs% del /f /q %vbs%
>%vbs%  echo Set fso = CreateObject("Scripting.FileSystemObject")
>>%vbs% echo If NOT fso.FolderExists(%1) Then
>>%vbs% echo fso.CreateFolder(%1)
>>%vbs% echo End If
>>%vbs% echo set objShell = CreateObject("Shell.Application")
>>%vbs% echo set FilesInZip=objShell.NameSpace(%2).items
>>%vbs% echo objShell.NameSpace(%1).CopyHere(FilesInZip)
>>%vbs% echo Set fso = Nothing
>>%vbs% echo Set objShell = Nothing
cscript //nologo %vbs%
if exist %vbs% del /f /q %vbs%

N.B. C:\Temp is folder where it stores the Extracted (UnZip) File.

And, c:\FolderName\batch.zip is source path, (where Zip files are stored).

Please, Change the Full File Path ( Drive, Folder & Zip file name), according to your need.

_______

A Time Zones

The following table contains a list of time zones supported by Oracle Real-Time Collaboration. See “Property to Configure Time Zones” for details about setting the default time zone for a Web Conferencing system.

Table A-1 Real-Time Collaboration Time Zones

Internal NameExternal User Visible Name
Pacific/Pago_Pago(-11:00) Pago Pago
Pacific/Honolulu(-10:00) Hawaii
America/Anchorage(-09:00) Alaska
America/Vancouver(-08:00) Canada Pacific Time
America/Los_Angeles(-08:00) US Pacific Time
America/Tijuana(-08:00) Tijuana
America/Edmonton(-07:00) Canada Mountain Time
America/Denver(-07:00) US Mountain Time
America/Phoenix(-07:00) Arizona
America/Mazatlan(-07:00) Mazatlan
America/Winnipeg(-06:00) Canada Central Time
America/Regina(-06:00) Saskatchewan
America/Chicago(-06:00) US Central Time
America/Mexico_City(-06:00) Mexico City
America/Guatemala(-06:00) Guatemala
America/El_Salvador(-06:00) El Salvador
America/Managua(-06:00) Managua
America/Costa_Rica(-06:00) Costa Rica
America/Montreal(-05:00) Canada Eastern Time
America/New_York(-05:00) US Eastern Time
America/Indianapolis(-05:00) East Indiana
America/Panama(-05:00) Panama
America/Bogota(-05:00) Bogota
America/Lima(-05:00) Lima
America/Halifax(-04:00) Canada Atlantic Time
America/Puerto_Rico(-04:00) Puerto Rico
America/Caracas(-04:00) Caracas
America/Santiago(-04:00) Santiago
America/St_Johns(-03:30) Newfoundland
America/Sao_Paulo(-03:00) Sao Paulo
Atlantic/Azores(-01:00) Azores
Etc./UTC(00:00) Universal Time
UTC(00:00) Universal Time
Atlantic/Reykjavik(00:00) Reykjavik
Europe/Dublin(00:00) Dublin
Europe/London(00:00) London
Europe/Lisbon(00:00) Lisbon
Africa/Casablanca(00:00) Casablanca
Africa/Nouakchott(00:00) Nouakchott
Europe/Oslo(+01:00) Oslo
Europe/Stockholm(+01:00) Stockholm
Europe/Copenhagen(+01:00) Copenhagen
Europe/Berlin(+01:00) Berlin
Europe/Amsterdam(+01:00) Amsterdam
Europe/Brussels(+01:00) Brussels
Europe/Luxembourg(+01:00) Luxembourg
Europe/Paris(+01:00) Paris
Europe/Zurich(+01:00) Zurich
Europe/Madrid(+01:00) Madrid
Europe/Rome(+01:00) Rome
Africa/Algiers(+01:00) Algiers
Africa/Tunis(+01:00) Tunis
Europe/Warsaw(+01:00) Warsaw
Europe/Prague(+01:00) Prague Bratislava
Europe/Vienna(+01:00) Vienna
Europe/Budapest(+01:00) Budapest
Europe/Sofia(+02:00) Sofia
Europe/Istanbul(+02:00) Istanbul
Europe/Athens(+02:00) Athens
Asia/Nicosia(+02:00) Nicosia
Asia/Beirut(+02:00) Beirut
Asia/Damascus(+02:00) Damascus
Asia/Jerusalem(+02:00) Jerusalem
Asia/Amman(+02:00) Amman
Africa/Tripoli(+02:00) Tripoli
Africa/Cairo(+02:00) Cairo
Africa/Johannesburg(+02:00) Johannesburg
Europe/Moscow(+03:00) Moscow
Asia/Baghdad(+03:00) Baghdad
Asia/Kuwait(+03:00) Kuwait
Asia/Riyadh(+03:00) Riyadh
Asia/Bahrain(+03:00) Bahrain
Asia/Qatar(+03:00) Qatar
Asia/Aden(+03:00) Aden
Africa/Khartoum(+03:00) Khartoum
Africa/Djibouti(+03:00) Djibouti
Africa/Mogadishu(+03:00) Mogadishu
Asia/Dubai(+04:00) Dubai
Asia/Muscat(+04:00) Muscat
Asia/Yekaterinburg(+05:00) Yekaterinburg
Asia/Tashkent(+05:00) Tashkent
Asia/Calcutta(+05:30) India
Asia/Novosibirsk(+06:00) Novosibirsk
Asia/Almaty(+06:00) Almaty
Asia/Dacca(+06:00) Dacca
Asia/Krasnoyarsk(+07:00) Krasnoyarsk
Asia/Bangkok(+07:00) Bangkok
Asia/Saigon(+07:00) Vietnam
Asia/Jakarta(+07:00) Jakarta
Asia/Irkutsk(+08:00) Irkutsk
Asia/Shanghai(+08:00) Beijing, Shanghai
Asia/Hong_Kong(+08:00) Hong Kong
Asia/Taipei(+08:00) Taipei
Asia/Kuala_Lumpur(+08:00) Kuala Lumpur
Asia/Singapore(+08:00) Singapore
Australia/Perth(+08:00) Perth
Asia/Yakutsk(+09:00) Yakutsk
Asia/Seoul(+09:00) Seoul
Asia/Tokyo(+09:00) Tokyo
Australia/Darwin(+09:30) Darwin
Australia/Adelaide(+09:30) Adelaide
Asia/Vladivostok(+10:00) Vladivostok
Australia/Brisbane(+10:00) Brisbane
Australia/Sydney(+10:00) Sydney Canberra
Australia/Hobart(+10:00) Hobart
Asia/Magadan(+11:00) Magadan
Asia/Kamchatka(+12:00) Kamchatka
Pacific/Auckland(+12:00) Auckland