Action in Internal transition does not save value of variable in DB - spring-boot

I have Internal transition with Action that sets value of variable
.and().withInternal()
.source(DETAILS_ERROR).event(VIEW).action(setReadTrue())
private static Action<StatusId, ActionId> setReadTrue() {
return context -> {
Doc doc = Util.getDoc(context);
doc.setRead(Boolean.TRUE);
};
}
I check the code
set DETAILS_ERROR status
send VIEW event
Postman sends me the response read=true
...and debugger tells me that read=true
but in db value has not changed(read=false)
If I use an External transition the value of the "read" variable in the database changes(read=true)
.and().withExternal()
.source(DETAILS_ERROR).target(DETAILS_ERROR).event(VIEW).action(setReadTrue())
say me please, what wrong? i want use withInternal()

Related

Flex Fileref… not receiving return result

I'm attempting to upload a file using FileRef and a php script. The file uploads and it definitely returns a test string ( I can see it with a web debugger).. but I can't grab that string in my flex app. I am using a DataEvent listener and a COMPLETE listener. Still no result.
What am I doing wrong here?
fileRef.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, onFileResponse);
fileRef.addEventListener(Event.COMPLETE, fileRef_complete);
private function fileRef_complete(evt:Event):void{
trace("COMPLETE");
trace(evt.target.data);
}
private function onFileResponse(event:DataEvent)
{
message.text = "HELLO";
trace("UPLOAD COMPLETE = " + event.data);
}
Is your issue that the events are not being fired, or that data field is empty when the events are fired?
If the former, is the server returning HTTP code 200? That's the only direct specification I see in the FileReference docs.
If the latter, I don't think it's expected for the data field to be populated on an upload() call:
data:ByteArray [read-only]
The ByteArray object representing the
data from the loaded file after a
successful call to the load() method.
Edit:
Does the FileReference go out of scope before the call is complete--that will cancel the transaction from the Flash end (though the call may still complete on the web end).
How are you calling FileReference.upload()? I assume that's not the issue if your web debugger shows success, but it may be of interest.
this is how i'm calling file upload:
fileRef.upload(urlReq, "Filedata", false);
It shouldn't be going out of scope, it's in the same mxml doc, but maybe I'm missing something.

When does a model get updated after the model data has changed?

There is a method named updateBindings(true?) in openui5. But I'm not sure when I have to invoke it. Sometimes, setting the modified data to a model causes view changes, which indicates the underlying model data actually gets changed. Sometimes it won't work.
The first example demonstrates that the model doesn't get changed without updateBindings(true).
http://jsbin.com/hulavutoha/edit?html,css,output
The second example derives from the first one. But the model gets updated even without updateBindings(true).
http://jsbin.com/lepuladivu/edit?html,css,output
So, what's the difference between the two examples? When do I need to invoke updateBindings(true) on a model so that it will get updated? What's the intent of the parameter true passed to updateBindings()?
If you add a console print in your formatter function
formatter : function(books) {
console.log("go!!!");
return books[0];
}
you can see that in the first example the function is not executed.
This because if you change a leaf property the linked conponent in thew view (using data-binding) receive the change event only if it bind exactly the leaf property.
P.S.
Instead to use getData
var data = oModel.getData();
data.books[0] = "my book";
oModel.setData(data);
you can use getProperty
var data = oModel.getProperty("/");
data.books[0] = "my book";
//oModel.setProperty("/", data);
In this mode the last line is not required

Send data changing page Windows Phone

I'm trying to change page and send some data to the new page just create. Basicaly, I have a page where the user could log, I'm gonna save the informations and then I'm going to open a new page by sendind the information to my "profil" page, where the user will have the information about his account. I'm using the MVVM patern, I don't know if it's going to change something but I ad this precision ;).
Edit: The only solution i have found is to pass the string of my object (gladly it is just strings). Because we can pass strings to another page. But I would prefer to give my object directly, or change my architecture if needed. Like don't create a page but replace my Usercontroles by others :(.
Thanks for the help.
For temp data:
If it is WP silverlight app, we can directly assign object to public property of destination page in OnNavigateFrom event of source page. For example, we can declare a public property A on Dest page, and implement the following in Source page to pass the user object:
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
Dest destPage = e.Content as Dest;
if(destPage != null)
{
User a = new User();
a.UserName = "aa";
a.ID = 1;
destPage.A = a;
}
}
For WP runtime app on WP 8.1, you can directly use Frame.Navigate(TypeName, Object) to pass the parameter.
For persist data:
I will suggest storing the data to local storage on source page and read it from destination page.
If I understand right you should use parameters in navigate URI
For example to send name you can use:
NavigationService.Navigate(new Uri("/View/Page.xaml?name=UserName", UriKind.Relative));
and then in OnNavigatedTo() check name parameter:
string name;
NavigationContext.QueryString.TryGetValue("name", out name);
You can use IsolatedStorageSettings.ApplicationSettings["keyname"]=yourobject;
And whenever you want to use this value just unbox this value as below,
if(IsolatedStorageSettings.ApplicationSettings.Contains("keyname"))
{
var obj=(yourobject)IsolatedStorageSettings.ApplicationSettings["keyname"];
}

Get apex page header in trigger

I am trying to get the user agent calling the apex page header in an apex class through a trigger, to update a field depending on the user device (mobile or not).
Here's the code I'm using:
public static boolean isMobileDevice() {
String userAgent = ApexPages.currentPage().getHeaders().get('User-Agent');
if (userAgent == null) {
return false;
}
Pattern p = Pattern.compile('Mobile|iP(hone|od|ad)|Android|BlackBerry|IEMobile|Kindle|NetFront|Silk-Accelerated|(hpw|web)OS|Fennec|Minimo|Opera M(obi|ini)|Blazer|Dolfin|Dolphin|Skyfire|Zune');
Matcher pm = p.matcher(userAgent);
return pm.find();
}
When the trigger runs, it returns this error:
System.NullPointerException: Attempt to de-reference a null object: Class.MyClass.isMobileDevice: line 129, column 1
The 129th line is this one :
String userAgent = ApexPages.currentPage().getHeaders().get('User-Agent');
Is there a workaround to get the user agent from a controller in an apex trigger or is it just impossible ?
Thanks in advance for any help you are able to provide.
I managed to do it finally.
I used a custom field on the object, and complete its value on creation of the record depending on user agent. Then in the trigger I only need to check that field and not the userAgent anymore.
Hope this can help.

C++ builder indy intercept IdHTTPProxyServer to insert header

I want to insert header of external script over https inside browser. For those purpose i use C++ builder with IdHTTPProxyServer component. I read Document from Response event but dont know how to just insert one simple .js. -> cause Document property is read only, on the other side BeforeCommandHandler want append with script (in code under i use just text to insert for simplicity)
How to insert .js external script in C++ builder?
Here is what i done so far.
void __fastcall TForm5::IdHTTPProxyServer1HTTPResponse
(TIdHTTPProxyServerContext *AContext)
{
Memo1->Lines->Append("\nOn Response!!!\n" + AContext->Document);
}
void __fastcall TForm5::IdHTTPProxyServer1BeforeCommandHandler
(TIdCmdTCPServer *ASender, UnicodeString &AData, TIdContext *AContext) {
try {
Memo1->Lines->Add(AData);
UnicodeString sa = AData;
AData = L"<html>Something</html>" + sa;
}
catch (int e) {
MessageBeep(100);
}
}
The TIdHTTPProxyServer::OnBeforeCommandHandler event is triggered before a client's request is processed. The AData parameter is the original request. This event is meant for logging/altering commands before they are parsed.
The TIdHTTPProxyServer::OnHTTPBeforeCommand event is triggered after a client's request headers have been received but before a connection is established to the target server and the client's request body is read and sent to the server.
The TIdHTTPProxyServer::OnHTTPResponse event is triggered after a server's response headers have been received but before the response body is read and sent to the client.
So none of those events will help you.
Neither will the TIdHTTPProxyServerContext::Document property, for that matter. That property does not contain the document data, as you are assuming. It contains the server-relative URL of the document being requested instead.
To do what you are asking for, set the TIdHTTPProxyServer::DefaultTransferMode property to tmFullDocument and use the OnHTTPDocument event. The TIdHTTPProxyServerContext::TransferSource property will tell you if the data is coming from the client or the server.
You will have full access to the headers and body data and you can modify them as needed. Just make sure you update the TIdHTTPProxyServerContext.Headers, in particular the Content-Length header, if you modify the body data. The body data is provided as a TStream object (specifically, a TMemoryStream). So you can either modify the stream's content directly, or you can create a new TStream object with your desired content (the VStream parameter of the event is passed by reference so you can re-assign it).
For example:
void __fastcall TForm5::IdHTTPProxyServer1HTTPDocument(TIdHTTPProxyServerContext* AContext, TStream* &VStream)
{
if (AContext->TransferSource == tsServer)
{
String s = ReadStringAsContentType(VStream, AContext->Headers->Values[L"Content-Type"], QuoteHTTP);
// this is NOT thread-safe! TIdHTTPProxyServer is multi-threaded,
// you must synchronize with the main thread in order to safely
// update UI controls...
//
// Memo1->Text = s;
s = L"<html>Something</html>" + s;
delete VStream;
VStream = new TStringStream(s, Sysutils::TEncoding::UTF8);
AContext->Headers->Values[L"Content-Length"] = VStream->Size;
AContext->Headers->Params[L"Content-Type"][L"charset"] = L"utf-8";
}
}

Resources