Регистрация  |  Вход

ESAPI

Кто-нибудь использовал ESAPI?

Кто-нибудь использовал [url=https://code.google.com/p/force-dot-com-esapi/]ESAPI[/url]?

Gres
Кто-нибудь использовал ESAPI?

Использовал, потом отказался. Если нужно могу скинуть пару методов, которые заменяют очень много кода из этого пакета.

[quote="Gres"]Кто-нибудь использовал [url=https://code.google.com/p/force-dot-com-esapi/]ESAPI[/url]?[/quote]

Использовал, потом отказался. Если нужно могу скинуть пару методов, которые заменяют очень много кода из этого пакета.

wilder
Использовал, потом отказался. Если нужно могу скинуть пару методов, которые заменяют очень много кода из этого пакета.

Скинь, если не сложно.

[quote="wilder"]Использовал, потом отказался. Если нужно могу скинуть пару методов, которые заменяют очень много кода из этого пакета.[/quote]
Скинь, если не сложно.

Gres
wilder
Использовал, потом отказался. Если нужно могу скинуть пару методов, которые заменяют очень много кода из этого пакета.

Скинь, если не сложно.

Код рабочий, но сыроват. Я в итоге отказался от него. Просто генерю exception если что-то пошло не так.

public static map<string,Schema.SObjectField> CheckFls(sObject sObj) {
map<string,Schema.SObjectField> UsedField = new map<string,Schema.SObjectField>();
if (sObj == null) return UsedField;
map<string,Schema.SObjectField> FieldsList = sObj.getSObjectType().getDescribe().fields.getMap();
JSONParser parser = JSON.createParser(JSON.serialize(sObj));
parser.nextToken(); parser.nextToken(); parser.nextToken(); parser.nextToken();

while (parser.nextToken() != null) {
if (parser.getCurrentToken() == JSONToken.FIELD_NAME) {
String fieldName = parser.getCurrentName().toLowerCase();
if (FieldsList.get(fieldName)!=null) UsedField.put(fieldName,FieldsList.get(fieldName));
parser.nextToken();
}
}
return UsedField;
}

public boolean isDML(sObject sObj,string Action) {
boolean Res=true;
if (sObj ==null) return Res;
if (Action == 'del') return sObj.getsObjectType().getDescribe().isDeletable();
map<string,Schema.SObjectField> UsedField = CheckFls(sObj);

for (string Key:UsedField.keyset()) {
Debug = Key + ' '+UsedField.get(Key);

Schema.DescribeFieldResult DescRes = UsedField.get(Key).getDescribe();
boolean Result = (Action == 'ins')
? DescRes.isCreateable()
: (Action == 'upd')
? DescRes.isUpdateable()
: (Action == 'ups') // не работает для sObject
? DescRes.isCreateable() && DescRes.isUpdateable()
: DescRes.isAccessible();
if ((Action == 'upd' || Action == 'ups' )&& DescRes.isDefaultedOnCreate()) Result = true;
if (!Result) {
Res=false;
Debug = 'FLS: '+Key;
break;
}
}
return Res;
}

public void DML(sObject sObj,string Action, Boolean DelFromRecycle) {
if (!isDML(sObj, Action) || Util.isEmpty(Action)) {
throw new CoreException(null,Core.ExceptionType.FIELD_ACCESS_VIOLATION,LogEx);
}
try {
if (Action == 'ins') insert sObj;
else if (Action == 'upd') update sObj;
else if (Action == 'ups') upsert sObj;
else if (Action == 'del') {
delete sObj;
if (DelFromRecycle) Database.emptyRecycleBin(new Id[]{sObj.Id});
}
else {
Debug = 'DML: Unknown DML operation ['+Action+']';
}
Debug = 'DML: '+Action+' '+sObj.Id;
} catch (Exception E) {
throw new CoreException(E,Core.ExceptionType.GENERIC,LogEx);
}
}

public void DML(sObject[] sObj,string Action, Boolean DelFromRecycle) {
if (!isDML(sObj[0], Action) || Util.isEmpty(Action))
throw new CoreException(null,Core.ExceptionType.FIELD_ACCESS_VIOLATION,LogEx);
try {
if (Action == 'ins') insert sObj;
else if (Action == 'upd') update sObj;
else if (Action == 'ups') upsert sObj; // не работает вообще, нужно передавать тип объекта
else if (Action == 'del') {
sObject[] Tmp = new sObject[]{};
Id[] RecycleId = new Id[]{};
for (sObject s: sObj){
// Thanks SALESFORCE !!! with 10 sObject;
RecycleId.add(S.Id);
if (Tmp.size()==10) {
delete Tmp;
Tmp = new sObject[]{};
} else {
Tmp.add(s);
}
}
delete Tmp;
if (DelFromRecycle) Database.emptyRecycleBin(RecycleId);
} else {
Debug = 'DML: Unknown DML operation ['+Action+']';
}
Debug = 'DML: '+Action+' '+Util.CreateSetId(sObj,'id');
} catch (Exception E) {
throw new CoreException(E,Core.ExceptionType.GENERIC,LogEx);
}
}

[quote="Gres"][quote="wilder"]Использовал, потом отказался. Если нужно могу скинуть пару методов, которые заменяют очень много кода из этого пакета.[/quote]
Скинь, если не сложно.[/quote]

Код рабочий, но сыроват. Я в итоге отказался от него. Просто генерю exception если что-то пошло не так.

[code]
	public static map<string,Schema.SObjectField> CheckFls(sObject sObj) {
		map<string,Schema.SObjectField> UsedField = new map<string,Schema.SObjectField>();
		if (sObj == null) return UsedField;
		map<string,Schema.SObjectField> FieldsList = sObj.getSObjectType().getDescribe().fields.getMap();
		JSONParser parser = JSON.createParser(JSON.serialize(sObj));
		parser.nextToken();	parser.nextToken();	parser.nextToken();	parser.nextToken();

        while (parser.nextToken() != null) {
            if (parser.getCurrentToken() == JSONToken.FIELD_NAME)  {
            	String fieldName = parser.getCurrentName().toLowerCase();
            	if (FieldsList.get(fieldName)!=null) UsedField.put(fieldName,FieldsList.get(fieldName));
                parser.nextToken();
            }
        }
        return UsedField;
	}

	public boolean isDML(sObject sObj,string Action) {
		boolean Res=true;
		if (sObj ==null) return Res;
		if (Action == 'del') return sObj.getsObjectType().getDescribe().isDeletable();
		map<string,Schema.SObjectField> UsedField = CheckFls(sObj);

		for (string Key:UsedField.keyset()) {
			Debug = Key + ' '+UsedField.get(Key);

			Schema.DescribeFieldResult DescRes = UsedField.get(Key).getDescribe();
			boolean Result = (Action == 'ins')
				? DescRes.isCreateable()
				: (Action == 'upd')
					? DescRes.isUpdateable()
					: (Action == 'ups') // не работает для sObject
						? DescRes.isCreateable() && DescRes.isUpdateable()
						: DescRes.isAccessible();
			if ((Action == 'upd' || Action == 'ups' )&& DescRes.isDefaultedOnCreate()) Result = true;
			if (!Result) {
				Res=false;
				Debug = 'FLS: '+Key;
				break;
			}
		}
		return Res;
	}

	public void DML(sObject sObj,string Action, Boolean DelFromRecycle) {
		if (!isDML(sObj, Action) || Util.isEmpty(Action)) {
			throw new CoreException(null,Core.ExceptionType.FIELD_ACCESS_VIOLATION,LogEx);
		}
		try {
			if (Action == 'ins') insert sObj;
			else if (Action == 'upd') update sObj;
			else if (Action == 'ups') upsert sObj;
			else if (Action == 'del') {
				delete sObj;
				if (DelFromRecycle) Database.emptyRecycleBin(new Id[]{sObj.Id});
			}
			else {
				Debug = 'DML: Unknown DML operation ['+Action+']';
			}
			Debug = 'DML: '+Action+' '+sObj.Id;
		} catch (Exception E) {
			throw new CoreException(E,Core.ExceptionType.GENERIC,LogEx);
		}
	}

	public void DML(sObject[] sObj,string Action, Boolean DelFromRecycle) {
		if (!isDML(sObj[0], Action) || Util.isEmpty(Action))
			throw new CoreException(null,Core.ExceptionType.FIELD_ACCESS_VIOLATION,LogEx);
		try {
			if (Action == 'ins') insert sObj;
			else if (Action == 'upd') update sObj;
			else if (Action == 'ups') upsert sObj; // не работает вообще, нужно передавать тип объекта
			else if (Action == 'del') {
				sObject[] Tmp = new sObject[]{};
				Id[] RecycleId = new Id[]{};
				for (sObject s: sObj){
					// Thanks SALESFORCE !!! with 10 sObject;
					RecycleId.add(S.Id);
					if (Tmp.size()==10) {
						delete Tmp;
						Tmp = new sObject[]{};
					} else {
						Tmp.add(s);
					}
				}
				delete Tmp;
				if (DelFromRecycle) Database.emptyRecycleBin(RecycleId);
			} else {
				Debug = 'DML: Unknown DML operation ['+Action+']';
			}
			Debug = 'DML: '+Action+' '+Util.CreateSetId(sObj,'id');
		} catch (Exception E) {
			throw new CoreException(E,Core.ExceptionType.GENERIC,LogEx);
		}
	}

[/code]